如何为每日回收的IIS应用池自动创建DebugDiagnosticTool内存泄漏规则?
实现DebugDiagnostic Tool自动关联回收后的w3wp进程
完全可以实现应用池回收后自动创建并关联内存泄漏规则,以下是几种可行的方案:
方案一:利用DebugDiag命令行+IIS回收事件触发
- DebugDiag自带命令行工具
DebugDiag.exe,支持直接按进程名称创建内存泄漏规则,无需指定PID,新生成的w3wp进程会被自动纳入监控。核心命令如下:DebugDiag.exe /rule /add /type:Memory /processname:w3wp.exe /fullonsecondchance /logpath:"C:\DebugDiagLogs" - 结合Windows任务计划程序,监听IIS应用池回收完成的事件(事件ID为5074,来源为WAS),触发上述命令执行。这样每次应用池回收后,新w3wp进程生成时,规则会自动关联。
方案二:配置DebugDiag规则按进程名称+应用池筛选
- 打开DebugDiag创建内存泄漏规则时,选择按Process Name关联
w3wp.exe,而非指定固定PID。 - 进入规则高级设置,添加进程筛选条件:通过w3wp进程的命令行参数匹配目标应用池名称(每个w3wp进程的命令行都会包含
-ap "你的应用池名称"字段),这样就能精准监控目标应用池的所有w3wp进程,不管PID如何变化。
方案三:PowerShell脚本+任务计划定期检查
- 编写PowerShell脚本,定位目标应用池对应的w3wp进程,若发现新进程则调用DebugDiag命令关联:
$targetAppPool = "你的目标应用池名称" $targetProcess = Get-WmiObject Win32_Process | Where-Object { $_.Name -eq "w3wp.exe" -and $_.CommandLine -match $targetAppPool } if ($targetProcess) { & "C:\Program Files\DebugDiag\DebugDiag.exe" /rule /add /type:Memory /pid:$($targetProcess.ProcessId) /fullonsecondchance /logpath:"C:\DebugDiagLogs" } - 将脚本添加到任务计划,设置为应用池回收事件触发,或每隔5-10分钟执行一次,确保新进程生成后能被及时关联。
注意事项
- 确保DebugDiag及执行脚本的账户拥有管理员权限,能正常访问w3wp进程。
- 日志路径需设置到有写入权限的目录,避免因权限问题导致监控失效。
- 多应用池场景下,务必通过命令行参数筛选目标应用池,避免误监控其他进程。
内容的提问来源于stack exchange,提问作者PsCraft
相关产品推荐
相关产品推荐

