1

我找到了一个可以完成这项工作的 powershell 版本,但它使用 WMI,这就是我遇到的问题,它泄漏并达到 512MB 屋顶并停止“内存不足”工作。

$processToMonitor = 'wmiprvse.exe' $threshold = 513MB

Register-WmiEvent -Query "SELECT * FROM __InstanceModificationEvent WITHIN 5 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name='$processToMonitor' AND TargetInstance.WorkingSetSize > $threshold" -Action { Get-Process -PID $event.SourceEventArgs.NewEvent。 TargetInstance.ProcessId | Stop-Process -Force -ErrorAction SilentlyContinue | 外空 }

因此,当 WMI 内存不足时,上述方法将不起作用,那么我可以使用其他方式来做同样的事情吗?

如果我使用:

任务清单 | 找到“WmiPrvSE.exe”

它用 pid 和内存使用情况吐出当前的 WmiPrvSE 进程。以及我如何使用它的想法?

这个 WMI 泄漏问题有一个补丁,但我无法尽快修补所有服务器。

4

1 回答 1

3

尝试这个:

$task = (tasklist | select-string 'Wmiprvse.exe') -split '\s+'

$proc = $task[0] -replace '\.exe'
[int]$mem = $task[-2] -replace '\.'

if ($mem -gt (513MB /1KB) )
{
  (get-process $proc).kill()
}

但这是等效且可取的(可以存在两个 wmiprvse.exe 会话!):

Get-Process wmiprvse | ? { $_.ws -gt 513MB } | Stop-Process -Force
于 2014-05-09T13:14:26.593 回答