IIS’de uygulama havuzu hataları

10 Temmuz
2008

IIS 6.0 ve sonrasında (sanıyorum 7.0 da da aynı) web sayfası işlemleri worker process’ler vasıtasıyla yapılır. (isolation mode calısmıyorsanız tabii) w3wp.exe isimli bu naçizane prosesler iis tarafından kod çalıştırılması ile birlikte çalıştırılır ve her istek geldiğinde uygulama havuzundaki ayarlara göre multi-thread olarak işleme sokulurlar. Eğer çalışan kodda handle edilmemiş bir hata oluşursa worker process bu hatayı handle edip event log’a ve cevaba hatayı duruma göre yazar. Peki worker process de bir hata oluşursa ne olur ?

Cevap basit, worker process o anki register değerlerini event log’a yazıp kendini kapatır. Bu durumda istek geldiğinde iis havuzdaki uygulamadan cevap bekler ve devamında tabi ki cevap alamaz. Belirli bir süre sonra event log’a ilgili worker process den cevap alamadığını yazar ve yeniden bir worker process calıstırıp havuza atar. Çıkışa yada event log’a ayrıntılı bir şey yazılmadığından programcı bu sorunu hangi kodun çıkardığını saptayamaz.

Çok çok arizi durumlar dışında wp nin sorun yaşamasının sebebi yazdığımız kodlardır tabi ki, ama bazı durumlarda wp hatayı handle etmeye calısırken kendi hata oluşturabilmektedir. Saçma geliyor farkındayım ama durumla yüzleşene kadar ihtimal verilmeyen bir durum, başa gelince çok mantıklı oluyor emin olun. Daha doğru yaklaşım açısıyla wp nin kullanıcı kodundaki oluşan hatayı handle ederken bir hata oluşturması durumu tamamen olay.

Konuyla ilgili tek bir tane ayrıntılı blog mevcut, orda da bahsedilen ve türlü ugraslarıma ragmen benimde sonunda kabullendiğim çözüm şu şekilde, “hazırlan ve yeniden çökmesini bekle”. Çöktüğü anda wp kendini kapattığına göre debug işlemi için ya doctor watson’a güveneceksiniz, ki ben denedim hiç bir faydası olmuyor. Ya bir genel debugger (windbg…) ya da sadece bu iş için yaratılmış olan iisstate ile debug düzeneğini kurup hatanın yeniden oluşmasını bekleyeceksiniz. Hata oluştuğunda (iisstate için -d parametresi) dump’ı alıp inceleyeceksiniz şansınız yaver gitmesi de gerekli ek olarak biraz debug olayında da anlamalısınız, ancak sonunda bu şekilde mutlu sona ulaşıp kodun hatasını bulabilirsiniz.

Belki bir alternatif iis sayfa log’u tutuyorsa hatanın oluştuğu saniyeyi bulup o saniye yapılan isteği incelemek de faydalı olabilir ama eğer hata bir postback esnasında oluşmuşsa bu durumda da yapılabilecek pek bir şey olmayacaktır haliyle. Tamamiyle samanlıkta iğne aramak olayı gibi aslında…

Yorumlar kapalı.

başa dön