使用adplus.vbs捕获转储 - 等待调试器完成?

时间:2009-12-27 19:36:19

标签: batch-file windbg memory-dump

我有一个Web应用程序,有时会挂起。我想研究一下原因,当它挂起时,我需要得到一个进程的内存转储。

所以我的想法是监控网站,当我检测到挂起时,我想启动一个捕获内存转储的.bat脚本,然后运行IISRESET以便重新启动,以便该站点再次开始响应。 / p>

我的问题是,adplus启动另一个进程(cdb.exe)并立即返回。在运行IISRESET之前,我需要等待cdb.exe完成。有没有办法在批处理脚本中执行此操作?或者,我可以在adplus命令行上指定在收集内存转储之前它不应该返回吗?

2 个答案:

答案 0 :(得分:2)

要创建Web应用程序的内存转储,Microsoft Debug Diagnostic Tools是您的最佳选择。

您可以创建“IIS Hang”规则,监控特定URL,并在指定的秒数内未收到任何响应时创建内存转储。

调试诊断工具无法帮助您重新启动IIS(或您的应用程序池),但通常内置的应用程序池重新启动选项应该足够了。如果确保为AppPool(在其“运行状况”选项卡上)设置了“启用Ping”,并且还适当地设置了其他运行状况/回收参数,则无论发生什么情况,您的应用都应继续响应。

如果没有,请使用“IIS Hang”DebugDiag规则监视带有故障转储的输出文件夹,并在出现新文件时重新启动IIS,这绝对可以解决问题......

答案 1 :(得分:2)

关于问题的第二部分,答案是肯定的:你可以(1)在命令行上指定等待(只要你可以访问和修改它); (2)等待进程在批处理文件中完成。

以最简单的形式,

(1)使用START /WAIT cdb parms代替cdb parms

(2)尝试FOR /F "tokens=1,2" %a in ('TASKLIST ^| FIND /I "cdb.exe"') DO @ECHO %a %b并用ECHO代替你想要的命令。