Failed Request Tracing kullanarak uzun süren isteklerin dump’ını almak


(Bu makale, http://blogs.msdn.com/b/webtopics/archive/2009/08/04/iis7-and-above-using-freb-to-capture-dumps-for-a-long-running-request.aspx adresinde yayınlanmış olan makalenin Türkçe’sidir – orijinal makale yazarı olan Rakki Muthukumar’dan izin alınmıştır)

Dump analizi ile web uygulamalarınızda karşılaşılabilecek performans / hang / crash problemlerine çözüm bulabilirsiniz. Dump toplamak için uygulamanın çalıştığı platforma göre Debug Diagnostic Tool ya da Debugging Tools For Windows gibi uygulamaları kullanabilirsiniz. Örneğin, web uygulamanızın uzun süre yanıt vermiyor durumda kaldığı durumlarda bahsedilen araçlarla worker process’in (w3wp.exe) dump’ını alarak inceleyebilirsiniz.

Ancak bazı senaryolarda problemin oluştuğu anı yakalayamayabilir ve dump toplayamayabilirsiniz. Örneğin, web uygulamanızın çok kısa aralıklarla geç yanıt verdiğini düşünün. Mesele bir ASP.NET sayfasının normalde yanıt verme süresi 3 saniye olsun ve bazı durumlarda bu süre 40 saniyeye kadar çıksın ama siz problemi tespit ettiğiniz anda tekrar normale dönmüş olsun. Bu durumda uygulamanın problemli zamanını yakalayamadığınız için dump toplama şansınız yoktur.

Bu gibi durumlarda IIS 7.0 ile birlikte gelen Failed Request Tracing özelliğini kullanabilirsiniz. Failed Request Tracing ile yaratacağınız kurallara göre IIS’in ilgili sayfada hangi modüllerde neler yaptığını görebilirsiniz. Ancak sayfanızda, uygulamanızın çalışmasının uzun sürmesine neden olan problemleri her zaman Failed Request Tracing ile yakalayamayabilirsiniz.

Failed Request Tracing ile sayfanın çalışmasının belli bir süreyi geçmesi durumunda spesifik bir EXE’nin çalışmasını sağlayabilirsiniz. İşte bu özelliği kullanarak uygulamanın çalışma süresinin belli bir süreyi geçmesi durumunda dump aldırabilirsiniz.

Aşağıda, bu konfigürasyonun nasıl yapıldığını anlatmaya çalışacağım. Dump toplamak için “Debugging Tools For Windows” uygulamasını kullanacağız.

Debugging Tools For Windows kurulumu

İlk olarak IIS’in çalıştığı server üzerine Debugging Tools For Windows’u indirip kurulumunu yapın. Aracı aşağıdaki web sayfasından indirebilirsiniz:

Debugging Tools for Windows 32-bit Version
http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx

Debugging Tools for Windows 64-bit Version
http://www.microsoft.com/whdc/devtools/debugging/install64bit.mspx

İşletim sisteminiz 64bit olsa bile indireceğiniz versiyon, application pool’unuzun çalıştığı mimariye göre değişecektir. Eğer application pool’unuz 32bit ise 32bit debugger’ı, 64bit ise 64bit debugger’ı indirip kurmalısınız.

Örneğimde application pool’un 64bit çalıştığını varsayıyorum.

Process’im 64bit olduğu için http://msdl.microsoft.com/download/symbols/debuggers/dbg_amd64_6.11.1.404.msi adresinden x64 versiyonunu server’a indirip kurulumunu yapın. Bu versiyon, debugger’ın son versiyonu değildir ve adplus.vbs script’ini kullanmaktadır. Eğer yeni versiyonu indirmek isterseniz yukarıdaki linklerde bulunan SDK download’u kullanabilirsiniz. Yeni versiyonda adplus script’i exe olarak değişmiştir, dolayısıyla aşağıdaki ayarlarda değişiklik yapmanız gerekecektir.

Debugger kurulumunu c:\Debuggers64 isimli bir klasöre yapın. Eğer kurulumu bu klasöre yapmayı unutursanız, kurulumu yaptığınız klasörün içindeki tüm dosyaları c:\Debuggers64 isimli klasöre kopyalayabilirsiniz. Kurulum herhangi bir registry ayarı yapmamakta, sadece dosyaları kurulum klasörüne kopyalamaktadır.

Kurulumu yaptıktan sonra dump’ların oluşacağı klasörü yaratın. Ben örneğimde c:\dumps klasörünü kullanıyorum. Failed Request Tracing kuralı ile dump’ı bu klasör içinde oluşturacağız.

Failed Request Tracing konfigürasyonu

Bu noktada, değişiklikleri yapmadan önce ilk olarak IIS’in konfigürasyonunun bir yedeğini almanız iyi olacaktır. Herhangi bir problemde kolayca yedekten geri dönebilirsiniz. Bunun için C:\Windows\System32\inetsrv\config klasöründeki .config dosyalarının bir kopyasını almanız yeterli olacaktır.

Failed Request Tracing konfigürasyonu için aşağıdaki adımları takip edin:

NOT: Eğer IIS arabirimde Failed Request Tracing Rules ikonunu göremiyorsanız, ilgili modülü server’a kurmamışsınız demektir. Bu durumda Server Manager üzerinden “Roles” ayarlarında, “Web Server (IIS) à Healths and Diagnostics” altından “Tracing”i eklemeniz gerekmektedir:

Bu modülü kurduktan sonra aşağıdaki ayarlar ile Failed Request Tracing kuralını oluşturabilirsiniz:

İlk olarak IIS arabirimini açın ve uzun süren isteklerin çalıştığı web sitesine geçin ve “Failed Request Tracing Rules” ikonuna çift tıklayın:

Gelen ekranda sağ taraftaki “Actions” paneli altında “Edit Site Tracing”e tıklayın. Eğer aktif değilse “Enable”a tıklayarak aktif hale getirin. Burada default değerleri bırakmanızı tavsiye ederim.

Tracing’i aktif hale getirdikten sonra “Add”e tıklayarak “All content (*)”i seçin ve next’e tıklayın. Gelen ekranda sadece “Time taken (in seconds)” seçili olsun ve değerini 30 yapın. Bu ayar ile 30 saniye ve üzerinde olan istekler için Failed Request Tracing logları toplanacaktır.

Daha sonra tekrar next’e tıklayın, bütün provider’ları seçili bırakın (ASP, ASPNET, ISAPI Extension ve WWW Server) ve Finish’e tıklayın. Aşağıdaki şekilde görüldüğü gibi bir kuralın oluşmuş olması lazım:

Şimdi uygulamanızın web.config dosyasını açıp aşağıda sarı ile işaretli olan eklemeleri yapın. Bu ayarlar, debugger’ın c:\Debuggers64 klasörüne kurulduğu ve server’da c:\dumps isimli bir klasör olduğu varsayımına göre yapılmıştır. Eğer kurulum ya da dump’ların oluşacağı klasör farklıysa aşağıdaki ayarları da uygun şekilde değiştirin.

NOT: Aşağıda ASPNET ve WWW Server ile ilgili ayarlar, server’ınızda yüklü olan modüllere göre farklılık gösterebilir.

<tracing>
<traceFailedRequests>
<addpath="*"customActionExe="c:\windows\system32\cscript.exe"customActionParams="c:\Debuggers64\adplus.vbs -hang -quiet -pn w3wp.exe -o c:\dumps"customActionTriggerLimit="20">
...
...
</add>
</traceFailedRequests>
</tracing>

Yukarıda göreceğiniz customActionExe, ilgili Failed Request Tracing kuralında belirtilen kriterler oluştuğu zaman çalıştırılacak uygulamayı ve customActionParams bu uygulamanın alacağı parametreleri belirler.

Son olarak “custom action” ayarlarının server bazında aktif hale getirilmesi gerekmektedir. Bunun için administrator yetkileriyle bir komut satırı açarak c:\Windows\System32\inetsrv klasörüne geçin ve aşağıdaki komutu çalıştırın:

appcmd.exe set config  -section:system.applicationHost/sites "/[name='<Web Sitesinin İsmi>'].traceFailedRequestsLogging.customActionsEnabled:true" /commit:apphost

Bu adımdan sonra ayarlar tamamlanmıştır. Web sitenizde herhangi bir sayfanın çalışması 30 saniyeye ulaştığı zaman hem Failed Request Tracing logları hem de tüm worker process’lerin (w3wp.exe) dump’ları belirtmiş olduğunuz klasörde oluşacaktır.

Ayarların test edilmesi

Ayarları test etmek için bir test.aspx sayfası hazırlayarak Page Load event’ine aşağıdaki kodu ekleyin:

System.Threading.Thread.Sleep(40000);
Response.Write("Sayfa yüklendi...");

Yukarıdaki kod parçası C# için yazılmıştır ve ASPX isteğinin yanıtlandığı thread’i 40 saniye boyunca askıya alacaktır. Dolayısıyla bu sayfanın çalışması en az 40 saniye sürecektir. İsteğin yanıtlanması 30 saniyeyi geçtiği anda hem Failed Request Tracing logları hem de dump dosyasının oluşmuş olması gerekir. Eğer dump oluşmadıysa yukarıdaki ayarları tekrar kontrol edebilirsiniz.

Geçerli olduğu platformlar:

IIS 7.0
IIS 7.5

Referanslar:

IIS7 (and above) – Using FREB to capture dumps for a long running request
http://blogs.msdn.com/b/webtopics/archive/2009/08/04/iis7-and-above-using-freb-to-capture-dumps-for-a-long-running-request.aspx

Troubleshooting Failed Requests Using Tracing in IIS 7
http://learn.iis.net/page.aspx/266/troubleshooting-failed-requests-using-tracing-in-iis-7/

Tess Ferrandez - Debugging Labs
http://blogs.msdn.com/b/tess/archive/tags/debugging+labs/

--
AMB

Comments (1)

  1. Ahmet Kaplan says:

    Ahmet Bey, güzel paylaşımınız için teşekkürler.

Skip to main content