Powershell Get-Processの負のメモリ値


8

私はPowershell Get-Processコマンドレットを使用していくつかの検証を行っていて、一部のプロセスについていくつかの奇妙な値を得ました。SQL Serverインスタンスを実行し、リソースモニターが報告するように3 GB以上のRAMを消費するサーバーでテストしました。Get-Processを実行すると、SQLサーバープロセスでWorkingSetの値が負になり、別のプロセスが2 GB以上のPrivateMemorySizeを消費し、同じ結果が得られました。 PMの負の値。

以下は結果のスクリーンショットです。

リソースモニター OSはポルトガル語です。申し訳ありません。

パワーシェル:

ここに画像の説明を入力してください sqlservrと最後のscvhostを確認してください...

幸いなことに、私のスクリプトはWMI(Win32_Processクラス)​​を使用してプロセス情報を取得し、そこにある値は正しく、すべてが一致しています。

バグですか?大きな価値があるのでしょうか?Powershell v3を使用しています。

回答:


11

これはx64サーバーですか?その場合は、このブログ投稿で問題が説明されている可能性があります。どうやら、それはget-processがx64システムメモリを読み取る方法に関係しています。

ポスターが負の数を表示した理由はかなり単純です。WSプロパティはWorkingSetにエイリアスされていますが、WorkingSetは32ビット値です。ポスターの場合、ワーキングセットのサイズが32ビットの値をオーバーフローして、負の数が表示されていました。

ブログによると、ソリューションは最終的にクエリ結果のフォーマットを強制することです:

$process = “*SQL"*” GPS $process | ft name, workingset64 –auto


おかげで、サイズなどの値が含まれていると思いました。また、サーバーでローカルにコマンドを実行した場合にのみ正しい結果が得られます。-ComputerNameパラメーターを使用してリモートで実行すると、同じ否定的な結果が得られます。PSSessionで実行すると正常に動作します。
esserafael 14

0

WorkingSetの代わりにWorkingSet64を選択すると、フォーマットせずにうまくいきました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.