应用程序池“X”正在运行的进程与Windows进程激活服务发生致命通信错误。

19

我正在运行一个ASP.NET 4.0应用程序,使用IIS 7.5。每天会有几次不明原因的应用程序池回收。当这种情况发生时,系统日志会显示以下事件:

服务应用程序池“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错误报告服务未运行。不确定是否需要这样做。

感谢任何帮助。


相关: https://dev59.com/O2w05IYBdhLWcg3wfx80 - RJFalconer
1个回答

5

你在应用程序日志中遇到的异常代码和线程退出代码都表明你遇到了堆栈溢出。尽管线程以堆栈溢出错误退出,但进程没有崩溃仍然令人困惑。无论如何,为了启用堆栈溢出异常断点,命令如下:

sxe sov

请注意,在您的情况下,您需要使用x86调试器版本,因为您的应用程序池配置为32位进程。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接