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 | 停止プロセス -強制 -ErrorAction SilentlyContinue | Out-Null }

したがって、WMI がメモリ不足の場合、上記の方法は機能しません。同じことを行う別の方法を使用できますか?

私が使用する場合:

タスクリスト | 「WmiPrvSE.exe」を見つけます

現在の WmiPrvSE プロセスを pid とメモリ使用量で吐き出します。そして、それをどのように使用できるかのアイデアはありますか?

この 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 の 2 つのセッションが存在できます!):

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