對不起,我不能想出一個好辦法句話我真正的問題。如何調試一個扣球ASP.NET進程的內存轉儲?
我運行在64位機器上的高流量的ASP.NET站點。但是,由於應用程序的某些遺留組件,我的IIS以32位模式運行。我正在運行對(運行的8芯機內6個過程)網站花園選擇一個應用程序池,這裏面具體的Web應用程序。
每週一次或兩次,其中一個進程會突然進入100%的CPU利用率,導致網站巨大的減速,所以我的計劃是等到發生這種情況時,內存轉儲違規進程,然後繞過WinDbg零線進入線程,看看代碼在哪裏旋轉。
我一直在使用的WinDbg之前要弄清楚是什麼導致網站上的僵局調試,但這是幾個月以前,我不記得我是如何得到它的工作。 (作爲一個方面說明,這是一個記錄你所做的一切的教訓。)
我在運行該站點的Windows 2003服務器上運行WinDbg,以防止出現任何DLL版本問題。這是我迄今爲止的步驟,請讓我知道我要去哪裏得到錯誤信息,我得到了什麼。
我第一存儲器轉儲使用用戶轉儲,用下面的命令,其中3389是進程ID的摻加過程:
userdump -k 3389
我轉儲裝入的86版WinDbg的。
由於我在64位機器上運行32位,我第一次加載內存轉儲,然後:
.load wow64exts
.effmach x86
我要確保我的符號路徑包含包含我的應用PDB文件的目錄:
.sympath+ c:\inetpub\myapp\bin
運行只是`.load SOS」失敗,與‘系統找不到指定文件’的錯誤,所以我去下面的完全合格的路徑,其中的工作原理:
.load c:\windows\microsoft.net\framework\v2.0.50727\sos
從這裏,我迷路了。我嘗試任何SOS命令,像!threads
,纔得到這個錯誤:
Failed to load data access DLL, 0x80004005
該錯誤也伴隨着我應該覈實項目的編號列表。 我覈實,我運行調試器的最新版本,mscordacwks.dll其實是在同一個目錄中Mscorwks.dll文件,和我調試在相同的架構轉儲文件。
我也運行了神奇的「.cordll -ve -u -l
」命令,但是這並沒有解決任何問題。當我執行該操作時,我總是會用「CLR DLL status: No load attempts
」迎接。然後我嘗試「.reload
」,這會產生一些警告,如「WARNING: wldap32 overlaps dnsapi
」。我想希望它說了類似「CLRDLL: Loaded DLL C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll
」。但事實並非如此。
你有沒有看過苔絲的[博客](http://blogs.msdn.com/tess/)?:這是一個信息的金礦。 – 2008-10-30 13:17:50
您描述的症狀聽起來像是GC2集合。 – 2008-10-07 15:22:28