web-dev-qa-db-ja.com

Windows Serverタスクマネージャーは、すべてのプロセスのワーキングセットサイズの合計よりもはるかに高いメモリ使用量を表示します

私は16GBのWindowsServer 2008x64マシンを主にSQLServer 2008で実行しています。タスクマネージャーに表示される空きメモリは非常に少なく(現時点では128 MB)、約15.7GBが使用されています。ここまでは順調ですね。

ここで、最も多くのメモリを使用してプロセスを絞り込もうとすると、混乱します。タスクマネージャの[プロセス]タブに表示されるように、200MBを超えるワーキングセットサイズのプロセスはありません。さて、おそらくワーキングセットサイズは関連するカウンターではありませんか?

それを理解するために、PowerShellコマンド[1]を使用して、プロセスオブジェクトの個々のプロパティを強引なアプローチで合計しました。確かに、そのうちの1つを合計すると15.7GBになるはずです。最も近いのはVirtualMemorySize(約12.7 GB)とPeakVirtualMemorySize(約14.7 GB)で、いずれもそうではありません。 WTF?

別の言い方をすれば、メモリに関連する多数のプロセス情報のうち、「正しい」情報はどれですか。つまり、タスクマネージャの[パフォーマンス]タブに表示されるサーバーの物理メモリにカウントされますか?

皆さん、ありがとうございました!

[1] $ erroractionpreference = "silentlycontinue"; get-process | gm | where-object {$ 。membertype -eq "Property"} | foreach-object {$。name; (get-process | measure-object -sum $_。name).sum/1MB}

5
Sleepless

すべてのプロセスのメモリ使用量を合計しても、通常、意味のある結果は得られません。これにより、メモリの2つの主要なユーザー、システムキャッシュとスタンバイリストが考慮されなくなります。数値のリストを単純に合計するだけでは、メモリ使用量を説明することはできません。そのためには、メモリ管理システムが複雑すぎます。

1
Larry Miller

ワーキングセットを合計すると、システムDLLからのコードや実行可能ファイルが複数回開始されるなど、プロセス間で共有されるページもマルチカウントされます。

1
afrazier