我们当前有几个以相同映像名称运行的进程:w3wp.exe。
其中一个有内存泄漏,因此,直到开发人员解决问题之前,我们才希望运行计划任务来在服务器 RAM 耗尽之前终止该进程。
我一直在使用:
taskkill /F /FI “MEMUSAGE gt 5000000” /IM “w3wp.exe”
只要内存使用量 > 5GB,就会终止该进程。我每 5 分钟将此作为计划任务运行一次。
这有效,但它也会终止 w3wp.exe 的其他实例。它们都在 NTAUTHORITY 下运行。
我的问题是,有没有办法将单个进程与使用相同图像名称运行的多个进程隔离开来?
有谁知道更好的方法来做到这一点?
干杯,
迈克尔
答案1
在批处理文件中尝试以下操作:
@echo off
set tmpfile=%tmp%\tasklist~.txt
tasklist /FI "MEMUSAGE gt 5000000" | FIND "w3wp.exe" > "%tmpfile%"
for /F "tokens=2*" %%i in (%tmpfile%) do @taskkill /f /PID %%i
del %tmpfile%
编辑:实际上,还有一个更好的方法:
首先,您需要将应用程序隔离在其自己的应用程序池中。然后,您只需发出以下命令:%windir%\System32\inetsrv\appcmd.exe recycle apppool "MyApplicationPool"
(如有必要,请使用 %windir%\System32\inetsrv\appcmd.exe 列表 apppool 来获取名称)
这应该可以正常回收应用程序(除非它真的卡住了)。