获取IIS工作进程崩溃转储

9
我在我的ASP.NET应用程序中做了一些不好的事情。可能是我使用的任何数量的CTP库或者我没有正确地处理某些内容。但是当我将ASP.NET重新部署到我的Vista IIS7安装或服务器的IIS6安装时,我会崩溃一个IIS工作进程。
我已经将问题缩小到了我的HTTP爬虫上,它是一个多线程的野兽,当被要求时会爬行有用的信息。在我启动爬虫并在顶部重新部署应用程序后,而不是优雅地卸载appDomain并重新加载,IIS工作进程将崩溃(弹出崩溃消息)并继续重新加载应用程序域。
当发生这种崩溃时,我该在哪里找到崩溃转储以进行分析?

这些demos应该能够帮助你。 - Gulzar Nazim
2个回答

16

下载Windows调试工具: http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx

调试工具包含一个名为ADPLUS的脚本,允许您在进程崩溃时创建转储文件: http://support.microsoft.com/kb/286350

如果您正在使用IIS6,则命令应该类似于:

cscript adplus.vbs -crash -pn w3wp.exe

该命令将会把调试器附加到工作进程上。当崩溃发生时,它将生成一个转储文件(*.DMP文件)。

您可以在WinDBG中打开它(也包括在Windows调试工具中)。 文件 > 打开崩溃转储...

默认情况下,WinDBG将向您显示(在命令行旁边)发生崩溃的线程。

在WinDBG中,您需要做的第一件事是加载.NET Framework扩展程序:

.loadby sos mscorwks

接下来,您将显示受管理的调用堆栈:

!clrstack

如果线程未运行托管代码,那么您需要检查本机堆栈:
kpn 200

这应该会给你一些想法。为了继续故障排除,我建议你阅读以下文章:

http://msdn.microsoft.com/en-us/library/ee817663.aspx


1
最新版的Windows调试工具中,adplus.vbs已被adplus.exe所取代。请注意。 - Brian Rasmussen
1
ADPlus.exe会附加到w3p.exe进程吗?我认为是这样的..但如果该进程重新启动会发生什么? - Pure.Krome
1
我可以在 IIS 7 - 7.5 中使用 adplus.vbs 吗? - Kiquenet

1
一次快速搜索发现了 IISState - 它依赖于 Windows 调试工具,并需要在崩溃发生时运行,但考虑到你所描述的情况,这不应该是一个问题。

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