web-dev-qa-db-ja.com

プライベートバイトVSプロセスエクスプローラーのワーキングセット

ワーキングセットは、プロセスが使用している実際のメモリ量であり、プライベートバイトは、必要な場合に備えて確保しておく量であることも知っています。

では、システム上の他のプロセスから実際にどれだけのメモリが奪われているのかを把握するために、2つを追加しますか?

41
Scandalist

残念ながらそれほど単純ではありません。特に、プライベートバイトは、あなたが提起した質問に答えるのにあまり役に立ちません。

最初に覚えておくべきことは、メモリページがメインメモリまたは外部ストレージに存在する可能性があることです(最近の「ディスクページング」または「スワップ」)。 2つ目は、プロセスのフットプリントにメモリのプライベートページがあるだけでなく、他のプロセスが同時に使用している共有ページのオブジェクトも使用することです。

ワーキングセット は、現在メインメモリに格納されている、プロセスに属するページのサイズです。プロセスが使用するメモリのページがページファイルに移動されると、ワーキングセットメトリックから削除され、メインメモリに呼び出されると、再び追加されます。

ただし、ワーキングセットは、プロセスが所有するメモリのみを参照するわけではありません。プロセスは多くの共有メモリオブジェクトを使用し、これらのオブジェクトのサイズはstatに反映されます。残念ながら、2つのプロセスが1MBのオブジェクトを共有すると、両方のプロセスがワーキングセットに1MBの割り当てを示すため、すべてのワーキングセットを合計すると、1MBのオブジェクトが2回記録されるため、すべてのワーキングセットサイズの累積が発生する可能性があります。極端な場合には、利用可能なRAMのサイズを超えているように見えます。詳細はこちら: http://cybernetnews.com/cybernotes-windows-memory-usage-explained/

プライベートバイト は、プロセスのプライベートメモリフットプリントがスワップのために完全にページアウトされた場合に、プロセスに割り当てられる(必ずしも使用される必要はない)ページファイルスペースの量を指します。ほとんどの場合、プロセスはページファイルに完全に(またはまったく)常駐しているわけではないため、プライベートバイトには追加の割り当て用の「余裕」があるようです。しかし、そうではありません。

ただし、プライベートバイトはプロセスのプライベートメモリのみを参照するため、この値は共有リソースを反映していない場合があります(現在、共有リソースがこのプロセスでのみ使用されている場合でも)。

「ワーキングセットプライベート」(バージョンに応じてプロセスエクスプローラーの「WSプライベートバイト」または「プライベートWS」)は、おそらく使用に最適なメトリックです。それ自体はページファイルに関係しないため、物理RAMへのプロセスの影響を正確に表現し、共有オブジェクトを二重にカウントしません。共有オブジェクトは1回集計されます(それらを作成したプロセスのみ)。ただし、単一プロセスの観点からは、プロセスが別のプロセスによって作成された共有オブジェクトを使用していることを記録していないため、プロセスは別のプロセスでより多くのRAMを使用する可能性がありますマシン、または共有オブジェクトの別のプロセスインスタンスを使用する代わりに、共有オブジェクト自体を作成する必要があった場合。 Windowsタスクマネージャは、メモリ使用量メトリックとしてプライベートワーキングセットを使用します。

それが役に立てば幸い

55
Frank Thomas