2012-06-20 96 views
18

我正在IIS 7.5下運行ASP.NET 4.0應用程序。一天幾次,我們的應用程序池出乎意料地回收。發生這種情況時,我們的系統日誌顯示以下事件:服務應用程序池'X'的進程遇到與Windows進程激活服務的致命通信錯誤

服務應用程序池「X」的進程遇到與Windows進程激活服務的致命通信錯誤。進程ID是'5768'。數據字段包含錯誤編號。

OR

服務應用程序池 'X' A進程未能響應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 Debugging Tools併成立了崩潰規則,規定「具體的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錯誤報告服務沒有運行。不確定它是否需要。

感謝您的任何幫助。

+0

相關http://stackoverflow.com/questions/7204444/iis7-a-process-serving-application-pool-yyyyy-suffered-a-fatal-communication – RJFalconer

回答

4

您在應用程序日誌中獲得的異常代碼和線程退出代碼都表明您有堆棧溢出。令人費解的是,當線程退出時堆棧溢出錯誤,爲什麼進程不會崩潰?不管怎麼說,以啓用堆棧溢出異常休息,命令是:

sxe sov 

請注意,你需要在你的情況下使用調試器的x86版,因爲你的應用程序池配置爲32位進程。

相關問題