(不确定这是否是 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 将不是在调试器有机会转储它之前终止该进程;我是否遗漏了配置中的某些内容?