私は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}
すべてのプロセスのメモリ使用量を合計しても、通常、意味のある結果は得られません。これにより、メモリの2つの主要なユーザー、システムキャッシュとスタンバイリストが考慮されなくなります。数値のリストを単純に合計するだけでは、メモリ使用量を説明することはできません。そのためには、メモリ管理システムが複雑すぎます。
ワーキングセットを合計すると、システムDLLからのコードや実行可能ファイルが複数回開始されるなど、プロセス間で共有されるページもマルチカウントされます。