我有一个网络应用程序,有时会挂起。我想调查原因,并且需要在进程挂起时获取该进程的内存转储。

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

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

有帮助吗?

解决方案

关于你问题的第二部分,答案是肯定的:你既可以(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所需的命令。

其他提示

要创建 Web 应用程序的内存转储, 微软调试诊断工具 是您最好的选择。

您可以创建“IIS 挂起”规则,监视特定 URL,并在指定秒数内未收到响应时创建内存转储。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top