我有一个web应用程序,它有时会挂起。我想要调查原因,当进程挂起时,我需要获得进程的内存转储。
所以我的想法是监控网站,当我检测到挂起时,我想启动一个捕获内存转储的.bat脚本,然后运行IISRESET以重新启动,以便网站再次开始响应。
我的问题是,adplus启动另一个进程(cdb.exe)并立即返回。我需要等待cdb.exe完成,然后才能运行IISRESET。有没有办法在批处理脚本中做到这一点?或者,我可以在adplus命令行上指定在收集内存转储之前不返回内存吗?
发布于 2009-12-30 15:46:05
关于问题的第二部分,答案是肯定的:您可以(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替换您想要的命令。
发布于 2009-12-28 03:55:13
要创建web应用程序的内存转储,Microsoft Debug Diagnostic Tools是您的最佳选择。
您可以创建"IIS挂起“规则,监视特定的URL,并在指定秒数内未收到响应时创建内存转储。
Debug Diagnostics工具不会帮助您重新启动IIS (或您的应用程序池),但通常情况下,内置的应用程序池重新启动选项应该足以做到这一点。如果您确保为您的AppPool设置了“启用Pinging”(在其健康选项卡上),并且您还适当地设置了其他健康/回收参数,则无论发生什么情况,您的应用程序都应该继续响应。
如果没有,用你的"IIS Hang“DebugDiag规则中的崩溃转储来监视输出文件夹,并在出现新文件时重新启动IIS,这绝对可以做到这一点……
https://stackoverflow.com/questions/1966792
复制相似问题