从即将死亡的 IIS ASP.NET 工作进程中获取故障转储

从即将死亡的 IIS ASP.NET 工作进程中获取故障转储

(不确定这是否是 IIS 问题,所以如果这更适合 SO,我会很乐意移动它...)

我们有一个 IIS 托管的应用程序偶尔会死机,事件日志声称应用程序池报告自身由于死锁而处于不健康状态。我试图获取进程死机时的崩溃转储,看看我们能否找出问题所在。

我已经关注这个Microsoft 知识库文章 #828222,其中说应用程序池上有一个选项可以启用“孤立工作进程”分析。我们严格按照这些步骤操作 - 安装了调试工具,为应用程序池启用了孤立工作进程选项,并设置了一个批处理文件以在发生这种情况时运行:

adsutil.vbs SET W3SVC/AppPools/MyAppPool/OrphanWorkerProcess TRUE
adsutil.vbs SET W3SVC/AppPools/MyAppPool/OrphanActionExe "c:\debug\dump.cmd"
adsutil.vbs SET W3SVC/AppPools/MyAppPool/OrphanActionParams "%1%" 

本质上只是在死亡进程的 PID 上debugdump.cmd运行(在计算出唯一的文件名之后):cdb

c:\debug\cdb.exe -c ".dump /o /ma %FILENAME%;q" -p %1

IIS 端的配置似乎正确来说——它确实尝试在即将消亡的进程上运行批处理文件。但它实际上什么也没做,因为根据cdb

Cannot debug pid 3236, NTSTATUS 0xC000010A
    "An attempt was made to access an exiting process."

我认为这个选项的重点是 IIS 将不是在调试器有机会转储它之前终止该进程;我是否遗漏了配置中的某些内容?

相关内容