IIS 7'De HTTP Error 503. Hatası
-
Aylardır cayır cayır çalışan windows server 2008 sunucu bugün uçtu. Sayfaya erişmeye çalıştığımızdan "Service Unavailable ----- HTTP Error 503. The service is unavailable." hatası veriyordu. Uzaktan erişim şansı olmadığı için sunucuyu panelden restart ettim ancak düzelmedi. Daha sonra sunucuya bağlanma şansı yakaladığımda sunucunun saatinin 1-2 saat farklı olduğunu fark ettim. Onu direk Windows Update'den güncelledim. Stop olan Application pool'u enable ettim ancak ardından tekrar disable olmaya başladı. Server Manager'da IIS ile ilgili aşağıdaki hatalar loglanmış:
Error-----
Application pool 'Classic .NET AppPool' is being automatically disabled due to a series of failures in the process(es) serving that application pool.
Warning-----
A process serving application pool 'Classic .NET AppPool' suffered a fatal communication error with the Windows Process Activation Service. The process id was '424'. The data field contains the error number.
Warnings-----
A process serving application pool 'Classic .NET AppPool' suffered a fatal communication error with the Windows Process Activation Service. The process id was '3564'. The data field contains the error number.
Warnings-----
A process serving application pool 'Classic .NET AppPool' suffered a fatal communication error with the Windows Process Activation Service. The process id was '1552'. The data field contains the error number.
Daha sonra event viewer'dada aşağıdaki hayatları yakaladım:
Information---
Fault bucket , type 0
Event Name: APPCRASH
Response: Not available
Cab Id: 0
Problem signature:
P1: w3wp.exe
P2: 7.5.7601.17514
P3: 4ce7afa2
P4: clr.dll
P5: 4.0.30319.1022
P6: 52ccf00f
P7: c00000fd
P8: 0000000000002184
P9:
P10:
Attached files:
These files may be available here:
C:\ProgramData\Microsoft\Windows\WER\ReportQueue\AppCrash_w3wp.exe_3950b72f36827f17f10bb911c46eedd424a6d60_0e6212c5
Analysis symbol:
Rechecking for solution: 0
Report Id: 387cbe82-997a-11e3-9230-e5c74c4d8294
Report Status: 0
Information------
Fault bucket , type 0
Event Name: APPCRASH
Response: Not available
Cab Id: 0
Problem signature:
P1: w3wp.exe
P2: 7.5.7601.17514
P3: 4ce7afa2
P4: clr.dll
P5: 4.0.30319.1022
P6: 52ccf00f
P7: c00000fd
P8: 0000000000002184
P9:
P10:
Attached files:
These files may be available here:
C:\ProgramData\Microsoft\Windows\WER\ReportQueue\AppCrash_w3wp.exe_3950b72f36827f17f10bb911c46eedd424a6d60_0e6212c5
Analysis symbol:
Rechecking for solution: 0
Report Id: 387cbe82-997a-11e3-9230-e5c74c4d8294
Report Status: 4
Error-----
Faulting application name: w3wp.exe, version: 7.5.7601.17514, time stamp: 0x4ce7afa2
Faulting module name: clr.dll, version: 4.0.30319.1022, time stamp: 0x52ccf00f
Exception code: 0xc00000fd
Fault offset: 0x0000000000002184
Faulting process id: 0x1a8
Faulting application start time: 0x01cf2d86ea305136
Faulting application path: c:\windows\system32\inetsrv\w3wp.exe
Faulting module path: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
Report Id: 387cbe82-997a-11e3-9230-e5c74c4d8294
Sizce bunların sebebi nedir hacılar?
-
Hocam remote desktop olmadan sorun çözülmez gibime geliyor.
Sunucuda aşırı bir yoğunluk veya saldırı olabilir. Serveri reboot ettin mi yoksa iis yimi reboot ettin?
Edit: ayrıca sunucuda kaç site var, siteleri farklı farklı application poollara bölüp dener misin? Birde CPU Ram ve ethernet kullanımı ne durumda?
SPY-CX5 tarafından 19/Şub/14 20:44 tarihinde düzenlenmiştir -
output cache mekanizması kullanıyorsun muhtemelen ?
asp.net altındaki framework klasöründe temporary file ların hepsini temizle daha sonra appoolu restart et ve sistemi tekrar çalıştır.
eğer uzak masaüstü bağlantın yoksa. output cache mekanizmasını komple devre dışı bırak ve serveri yne uzaktan restart et.
%90 düzelir.
ilk izlenimim bu şekilde. paylaşabileceğin başka done varsa paylaş bakalım.
------------------
FATAL EDIT:
yukarıdakileri unut site ile alakalı değil. son updateleri kaldır bir kaç kişide daha benzer şeyler olmuş. mümkünse uzak masasütüne bağlan ve auto updateleri disable et.
sonra restart et serveri.
manglerman tarafından 19/Şub/14 20:48 tarihinde düzenlenmiştir -
IIS ve netframeworkleri kaldırdım bir süre düzeldi ancak tekrar aynısı oldu.
Sunucuya şuanda erişimim var.
Windows updateleri kaldırmaya çalışacam şimdi.
-
Updatelerin bir kısmını kaldırdım restart ettim RDP uçtu, "configuring remote session" derken kendi kendine kapatıyor RDP bağlantısını.
-
Server update yapınca belli bir süre RDP bağlantısını kesiyor.
Muhtemelen silinen updatelerin işlemlerini yapıyordur. Servera saldırı var mı baktın mı?
-
amq kaç saattir uğraşıyorum. Neredeyse 18 saattir sistem kesik anca düzeltebildim.
Sebep?
Infinite recursively function :)
Sistemde parent-subproject mantığı var. Bir fonksyionda bu projeleri parent-sub diye listeliyor. Akıllı kullanıcının biri projenin birini kendine parent proje diye ekleyince işler karışmış. Infinite loop meydana geldiğinde deadlock oluşuyor ve deadlock sistemi tamamen kitlemesin diye ilgili application pool'u disable ediyor.
Tabi application pool disable olunca herhangi bir exception filan gözükmüyor. Bunun üzerine http://stackoverflow.com/questions/18335678/how-to-debug-w3wp-clr-dll-error/ linkindeki işlemi yapmaya çalıştım ama bi boka yaramadı. Bende sistemin veritabanının kendi makinama indirip Visual Studio'da debug ile açınca siteyi sorun ortaya kabak gibi patladı.
Şimdilik sorunu düzelttim ancak recursive funtion'da infinite loop'dan kaçınmak için biraz araştırma yapmam gerekecek. Çünkü sadece A->A bir infinite loop değil, A->B->C->D->B gibi sikim sokim şeylerle infinite loop dönüşebiliyor. Bunu hem baştan engellemek hemde böyle bir loop oluştuğunda kaçınmak için çareler lazım şimdi.
Bu arada bu mevzulara bakarken event logları karıştırınca gördüm makinaya baya bruteforce saldırısı gelmiş. İşin garibi windows sunucuda SSHD'nin ne işi var? SSHD nedir tam olarak anlayamadım.
-
hocam recursive functionlarlarda maximum deep belirle.
eğer kendi yazdığın bir recursive function ise ek parametre olarak sürekli deep tutan bir değişken gönder. her bir derinliğe indiğinde o sayıyı bir arttırarak gönder.
functionun başında da maximum deep sayısını sabit bir yerden çek (functionun içine de yazabilirsin const olarak)
mantıklı bir sayı olsun. mesela ürün kategorisi tutuyorsan en fazla 100 deep olabilir gibi bir mantık belirle.
eğer eklediğin deep parametresi 100 den fazlaysa orda kes at. sonsuz döngüye girmesini engelle.
çok araştırma yapmadn direk bu şekilde engelleyebilirsin. -
manglerman bunu yazdı
hocam recursive functionlarlarda maximum deep belirle.
eğer kendi yazdığın bir recursive function ise ek parametre olarak sürekli deep tutan bir değişken gönder. her bir derinliğe indiğinde o sayıyı bir arttırarak gönder.
functionun başında da maximum deep sayısını sabit bir yerden çek (functionun içine de yazabilirsin const olarak)
mantıklı bir sayı olsun. mesela ürün kategorisi tutuyorsan en fazla 100 deep olabilir gibi bir mantık belirle.
eğer eklediğin deep parametresi 100 den fazlaysa orda kes at. sonsuz döngüye girmesini engelle.
çok araştırma yapmadn direk bu şekilde engelleyebilirsin.ilk o aklıma geldi, hatta depth hali hazırda zaten var fonksiyonda. ama şöyle daha sofistike bir çözüm varmıdır diye düşünüyordum :)
-
fonksiyon mssql de olsaydı max_recursion değeriyle oynayıp işini görürdün ama kod kısmında bunu kısıtlayan birşey yok muhtemeln
(varsada ben bilmiyorum :) )
