Freigeben über


HTTPERR

IIS 6.0, önceki versiyonlara göre çok ciddi mimari değişikliklere sahipti. Bunlardan bir tanesi de HTTP.SYS isimli bir "sürücü" idi. IIS'in daha eski versiyonlarında çekirdek (kernel) seviyesinde çalışan bir bileşen yoktu.

IIS 6.0 (ve 7.0) ile gelen bu bileşenin neler yaptığının çok fazla detayına (en azından bu yazımda) girmeyeceğim. Burada bahsetmek istediğim, bu mimari değişikliği sonucu ortaya çıkan ikinci bir tür IIS logudur: HTTPERR logları.

HTTPERR logları

IIS loglarını kaydeden bileşen HTTP.SYS sürücüsüdür. Gelen isteği, ilgili uygulama havuzuna (application pool) gönderir ve oradan bir yanıt geldiğinde (istek başarılı da olsa başarısız da olsa) bunu IIS'in loglarına kaydeder. Ancak bazı durumlarda uygulama havuzundan yanıt alamayabilir; isteği aktaracaği uygulama havuzunu bulamayabilir; veya istekteki bir sorun nedeniyle kendisi bloklamaya karar verebilir. Bu tur istekleri IIS loglarına kaydetmez (kaydedemez). Ancak bunlarla ilgili bilgileri de tutmak gerekir. İşte tam da bu noktada HTTPERR logları devreye girer.

Yukarıdaki tanımdan da anlaşılabileceği gibi, IIS'e kadar ulaşabilmiş her istek mutlaka loglanır: IIS loglarına değilse bile HTTPERR loglarına. Bu nedenle, bazı sorunları incelerken IIS loglarını inceler ve orada ilgili isteğin kaydını bulamazsak bir de HTTPERR loglarına bakmalıyız. Eğer burada da yoksa, istek IIS'e hiç ulaşmamış diyebiliriz.

Loglarda neler görebiliriz?

Aşağıdaki makalede bu loglarda ne gibi bilgilerin tutulduğu ve hangi mesajın ne anlama geldiği bilgilerini bulabilirsiniz:

Error logging in HTTP API
https://support.microsoft.com/kb/820729

Bu makalede her turlu detay anlatıldığı için ben burada yeniden anlatmayacağım. Benim burada eklemek istediğim bir nokta, hata mesajları arasında Timer ile başlayanların genelde aslında sorun belirtmeyeceğidir. Bunları (genel olarak) göz ardı edebiliriz. En çok karşılaşacağımız ve gerçekten sorun belirtiyor olabilecek olanlardan bazıları şunlardır:

AppOffline - Uygulama havuzunun (application pool) kapatıldığı ve kullanıcının "Service Unavailable" aldığı anlamına gelir. Olay günlüklerinde (event log) bunun nedeniyle ilgili daha detaylı bilgi bulunabilir.

Connection_Abandoned_By_AppPool - Uygulama havuzu beklenmedik bir şekilde sonlanmıştır. Buna genellikle uygulamadaki bir sorun neden olur. Olay günlüklerinde (event log) bunun nedeniyle ilgili daha detaylı bilgi bulunabilir. Daha fazla detay için için dump analizi gerekebilir.

Connections_Refused - Kernel NonPagedPool hafıza alanında boş miktar 20MB'ın altına düşmüstür. Bu alan, özel bir hafıza alanı olup ebatı oldukça sınırlıdır. Burayı genellikle "sürücüler" kullanır. Bunlardan birinde oluşabilecek bir sızıntı, sonuçta IIS'in yanıt veremez hale gelmesine neden olabilir. Bu sorunu atlatmanın yolu makineyi yeniden başlatmaktır. Tamamen gidermek için hangi sürücünün soruna neden olduğunu tespit etmek ve gerekiyorsa o sürücüyü güncellemek gerekecektir.

CENK