asp.net - 服务于应用程序池 'X' 的进程与 Windows Process Activation Service 发生致命通信错误

标签 asp.net debugging http iis-7 windbg

我在 IIS 7.5 下运行 ASP.NET 4.0 应用程序。一天几次,我们的应用程序池意外回收。发生这种情况时,我们的系统日志会显示以下事件:

为应用程序池“X”提供服务的进程与 Windows Process Activation Service 发生致命通信错误。进程 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 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 Process Activation Service 的致命通信错误”的事件时,我们的应用程序池似乎正在回收,但是当这些事件发生时,我没有从 IIS 调试工具或 ADPlus 获得任何故障转储信息。出于某种原因,由于我附加了调试器,我在应用程序日志中不再收到与我的系统日志警告事件相对应的任何“错误”事件。不知道为什么。我不知何故需要获取包含 CLR 信息的完整故障转储,以便找出我的问题所在。

我唯一想提的另一件事是 Windows 错误报告服务没有运行。不确定是否需要。

感谢您的帮助。

最佳答案

您在应用程序日志中获得的异常代码和线程退出代码都表明您有堆栈溢出。令人费解的是,为什么当线程退出并出现堆栈溢出错误时进程没有崩溃。无论如何,要在堆栈溢出异常时启用中断,命令是:

sxe sov

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

关于asp.net - 服务于应用程序池 'X' 的进程与 Windows Process Activation Service 发生致命通信错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11122426/

相关文章:

java - 禁止在运行时通过 Rest Assured 发送空字段

asp.net - ASP.NET 可以将 ajax 调用重定向到不同的 Web 服务吗?

c# - MVC : Displaying Roles in a list of checkboxes, 然后保存它们

c# - 身份框架用户锁定

c# - 使用 C# 将文件写入 URL 位置

android - 调试原生 Android 时的 SIG33

php - 所有 localhost http 链接都重定向到 https

javascript - 在 Chrome 中调试 .vue 组件

typescript - 源映射(用于浏览器扩展)在 Chrome 75、Edge 77 中对我不起作用

http - URL 可以在 GET 请求中包含任意二进制数据吗?