我们的中间件服务器的dllhost.exe 内存使用达到1.2G的时候,中间件就无法提供服务了,以前我们的做法就是重启服务器,如果事情在晚上会非常麻烦。
我测试如果在任务管理器里面杀掉dllhost.exe(注意有两个,要杀用户=IWAM_XXX的进程,也就是IIS的用户),系统自己会起来新的dllhost.exe进程。如果我能定时在内存使用达到1.2G,kill掉该进程,就可以彻底解决这个问题了。
我看了一些文档,最后发现只要计划任务里面调用这个命令就可以解决这个问题了:
TASKKILL /F /FI "USERNAME eq IWAM_XXX" /FI "IMAGENAME eq dllhost.exe" /FI "MEMUSAGE gt 524288"
实际上taskkill /? 看帮助,简单说明一下:
/FI filter 应用筛选器以选择一组任务。
允许使用 "*"。例如,映像名称 eq acme*
筛选器:
筛选器名 有效运算符 有效值
----------- --------------- -------------------------
STATUS eq, ne RUNNING |
NOT RESPONDING | UNKNOWN
IMAGENAME eq, ne 映像名称
PID eq, ne, gt, lt, ge, le PID 值
SESSION eq, ne, gt, lt, ge, le 会话编号。
CPUTIME eq, ne, gt, lt, ge, le CPU 时间,格式为
hh:mm:ss。
hh - 时,
mm - 分,ss - 秒
MEMUSAGE eq, ne, gt, lt, ge, le 内存使用量,单位为 KB
USERNAME eq, ne 用户名,格式为 [domain\]user
MODULES eq, ne DLL 名称
SERVICES eq, ne 服务名称
WINDOWTITLE eq, ne 窗口标题
我这里就是杀掉USERNAME=IWAM_XXX,IMAGENAME=dllhost.exe, MEMUSAGE大于512M的时候杀进程。
在操作前可以使用tasklist命令自己看看,两者基本语法相似的。
我测试如果在任务管理器里面杀掉dllhost.exe(注意有两个,要杀用户=IWAM_XXX的进程,也就是IIS的用户),系统自己会起来新的dllhost.exe进程。如果我能定时在内存使用达到1.2G,kill掉该进程,就可以彻底解决这个问题了。
我看了一些文档,最后发现只要计划任务里面调用这个命令就可以解决这个问题了:
TASKKILL /F /FI "USERNAME eq IWAM_XXX" /FI "IMAGENAME eq dllhost.exe" /FI "MEMUSAGE gt 524288"
实际上taskkill /? 看帮助,简单说明一下:
/FI filter 应用筛选器以选择一组任务。
允许使用 "*"。例如,映像名称 eq acme*
筛选器:
筛选器名 有效运算符 有效值
----------- --------------- -------------------------
STATUS eq, ne RUNNING |
NOT RESPONDING | UNKNOWN
IMAGENAME eq, ne 映像名称
PID eq, ne, gt, lt, ge, le PID 值
SESSION eq, ne, gt, lt, ge, le 会话编号。
CPUTIME eq, ne, gt, lt, ge, le CPU 时间,格式为
hh:mm:ss。
hh - 时,
mm - 分,ss - 秒
MEMUSAGE eq, ne, gt, lt, ge, le 内存使用量,单位为 KB
USERNAME eq, ne 用户名,格式为 [domain\]user
MODULES eq, ne DLL 名称
SERVICES eq, ne 服务名称
WINDOWTITLE eq, ne 窗口标题
我这里就是杀掉USERNAME=IWAM_XXX,IMAGENAME=dllhost.exe, MEMUSAGE大于512M的时候杀进程。
在操作前可以使用tasklist命令自己看看,两者基本语法相似的。