如何调试 w3wp.exe 随机崩溃的原因?

sha*_*shi 6 iis iis-7 iis-6 asp.net

在主生产服务器上,IIS 工作进程有时会崩溃。我从事件查看器中获得以下信息。

错误的应用程序名称:w3wp.exe,版本:7.5.7601.17514,时间戳:0x4ce7a5f8 错误的模块名称:KERNELBASE.dll,版本:6.1.7601.17651,时间戳:0x4e211319 异常代码:0x40b0x05 错误代码:0x40b0x05 9 错误的应用程序启动时间:0x%10 错误的应用程序路径:%11 错误的模块路径:%12 报告 ID:%13

这在 prod 服务器上随机发生,我无法在其他任何地方重新创建此崩溃。这发生在 IIS 6 上,我们最近转移到了 Windows Server 2008 和 IIS 7.5,崩溃也发生在那里。

如何去找到这个的根本原因?

Gre*_*kew 7

此处包含 Tess Ferrandez 博客中的分步指南:

https://blogs.msdn.com/b/tess/archive/2009/03/20/debugging-a-net-crash-with-rules-in-debug-diag.aspx

本质上,您将设置 DebugDiag 1.2 x64 以触发该异常代码,并创建完整的用户转储。创建转储后,您可以使用 DebugDiag 为您分析转储。尽管有那个特殊的例外,您可能需要使用 WinDbg+SOS。

一些更相关的信息:

“对于你们大多数人可能知道的堆栈溢出,最常见的原因是我们处于某种类型的递归循环中,所以我们真正想知道的是这个堆栈上有什么......它出现的原因只是地址而不是方法名称,因为 debug diag 不理解 .net,所以我们必须将转储带到 windbg 来分析它并检查 .net 堆栈。

“在 windbg 中,我们可以加载 sos(.loadby sos mscorwks)并在活动堆栈上运行 !clrstack 以获取调用堆栈。”

(如果您运行的是 .NET 4,则加载 sos 的命令是: .loadby sos clr

最终,您要查找的是应用程序中导致递归的违规代码。加载 SOS 时出现在 WinDbg 中的方法名称可能会让您指向正确的方向。