為應用程序池“X”提供服務的程序與 Windows 程序啟動服務發生了致命的通信錯誤
我在 IIS 7.5 下執行 ASP.NET 4.0 應用程序。一天幾次,我們的應用程序池意外回收。發生這種情況時,我們的系統日誌會顯示以下事件:
為應用程序池“X”提供服務的程序與 Windows 程序啟動服務發生了致命的通信錯誤。程序 ID 為“5768”。數據欄位包含錯誤號。
要麼
為應用程序池“X”提供服務的程序未能響應 ping。程序 ID 為“1032”。
幾乎總是,應用程序日誌中同時存在相應的事件,如下所示:
Faulting application name: w3wp.exe, version: 7.5.7600.16385, time stamp: 0x4a5bcd2b Faulting module name: clr.dll, version: 4.0.30319.269, time stamp: 0x4ee9ae83 Exception code: 0xc00000fd Fault offset: 0x00001916 Faulting process id: 0x508 Faulting application start time: 0x01cd4d8958ecf9ad Faulting application path: C:\Windows\SysWOW64\inetsrv\w3wp.exe Faulting module path: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll Report Id: 8dcc413b-b98a-11e1-8075-001c23d6d910因此,我安裝了IIS 調試工具並設置了崩潰規則,指定了“特定的 IIS Web 應用程序池”,不記錄首次機會異常,並且在“高級設置”(異常、斷點、事件)下沒有任何內容。
我還(同時)使用以下命令行從 Windows 調試工具執行 ADPlus:
adplus -crash -pn w3wp.exe -NoDumpOnFirst -o c:\logs但是,由於我附加了調試器,我在系統日誌中收到了幾條“警告”級別的消息(關於“程序服務應用程序池’X’遇到致命的通信錯誤……”的消息),但我我不再在應用程序日誌中獲得相應的錯誤級別事件。
我唯一能得到的是以下內容(其中大約有 50 個):
[6/18/2012 7:50:25 PM] Thread exited. Exiting thread system id - System ID: 3300. Exit code - 0x800703e9 [6/18/2012 7:50:25 PM] Thread exited. Exiting thread system id - System ID: 4992. Exit code - 0x800703e9 [6/18/2012 7:50:25 PM] Thread exited. Exiting thread system id - System ID: 5456. Exit code - 0x800703e9 [6/18/2012 7:50:25 PM] Thread exited. Exiting thread system id - System ID: 4924. Exit code - 0x800703e9退出程式碼0x800703e9表示某個地方的堆棧溢出,這是幸運的,因為一旦我找到它應該很容易修復。
但是,為了做到這一點,我需要從我的故障轉儲中獲取更多資訊,以便我可以使用 WinDbg 打開它們並使用“!clrstack”命令來查明我的問題。
**我的問題是:**我的調試工具配置不正確還是我誤解了事件日誌?每當我在系統日誌中看到有關“Windows 程序啟動服務的致命通信錯誤”的事件時,我們的應用程序池似乎正在回收,但是當這些事件發生時,我沒有從 IIS 調試工具或 ADPlus 獲得任何故障轉儲資訊。由於某種原因,由於我已附加調試器,因此在應用程序日誌中不再收到與我的系統日誌警告事件相對應的任何“錯誤”事件。不知道為什麼。我需要以某種方式獲取包含 CLR 資訊的完整故障轉儲,以便找出問題所在。
我能想到的唯一另一件事是 Windows 錯誤報告服務沒有執行。不確定是否需要。
謝謝你的幫助。
您在應用程序日誌中獲得的異常程式碼和執行緒退出程式碼都表明您有堆棧溢出。令人費解的是,為什麼當執行緒退出並出現堆棧溢出錯誤時程序沒有崩潰。無論如何,要啟用堆棧溢出異常中斷,命令是:
sxe sov請注意,您需要使用 x86 版本的調試器,因為您的應用程序池配置為 32 位程序。