我在IIS7.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 Debugging Tools并设置了一个崩溃规则,指定了“一个特定的IIS应用程序池”,没有记录第一次出现的异常,在“高级设置”(异常、断点、事件)下什么也没有。
我还(同时)使用以下命令行从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 Process Activation Service的致命通信错误”的事件时,我们的应用程序池都在回收,但是当这些事件发生时,我没有从IIS调试工具或ADPlus获得任何崩溃转储信息。由于某些原因,由于我附加了调试器,我在应用程序日志中不再收到与我的系统日志警告事件相对应的“错误”事件。不知道为什么。不知何故,我需要获得包含CLR信息的完整崩溃转储,这样我才能找出我的问题所在。
我能想到的另外一件事就是Windows错误报告服务没有运行。不确定是否需要这样做。
谢谢你的帮助。
发布于 2012-06-23 05:29:10
您在应用程序日志中获得的异常代码和线程退出代码都表明存在堆栈溢出。令人费解的是,当线程退出时出现堆栈溢出错误时,为什么进程不会崩溃。无论如何,要启用堆栈溢出异常时中断,命令为:
sxe sov
请注意,在这种情况下,您需要使用x86版本的调试器,因为您的应用程序池配置为32位进程。
https://stackoverflow.com/questions/11122426
复制相似问题