18

Process Explorerで使用可能なメモリグラフでは、上のグラフにコミット履歴が表示されます。これは実際にOSレベルで何を示していますか?

これがプロセスによってヒープに割り当てられたメモリであるかどうかを実験するために、100MBを何度も段階的にmallocする小さなプログラムを作成しました。コミット履歴グラフはしばらくの間増加し(最大1.7 GBのメモリ割り当て)、その後はプログラムがメモリを割り当てているにもかかわらず成長しませんでした。

それで、このグラフは何を示していますか?この情報を使用して、Windowsの状態を理解/分析するにはどうすればよいですか?

4

1 に答える 1

27

コミットレベルは、システム内のすべてのプロセスに割り当てられた匿名仮想アドレス空間の量です。(たとえば、mmapされたファイルからのファイルでバックアップされた仮想アドレス空間は含まれません。)プロセスエクスプローラーでは、「コミット履歴」グラフにこの値のサイズが経時的に表示されます。

仮想メモリの割り当てと分割の方法により(仮想アドレス空間のページをバックアップする実際のRAMは、最初にタッチされるまで必ずしも割り当てられるとは限りません)、この現在の「コミット」レベルは、メモリの最悪のケース(現時点)を表します。システムが考え出す必要があるかもしれません。Linuxとは異なり、Windowsは、(ページングファイルを介して)思い付くことができない、または偽造できないRAMのpromise(アドレス空間)を配布しません。したがって、コミットレベルがシステムの制限(おおよそRAM +ページングファイルサイズ)に達すると、新しいアドレス空間の割り当ては失敗します(ただし、既存の仮想アドレス空間領域の新しい使用は失敗しません)。

この値から引き出すことができるシステムに関するいくつかの結論:

  • この値が現在のRAM(カーネルとシステムのオーバーヘッドを除く)よりも小さい場合、最悪の場合、すべてがメモリに収まるはずなので、システムがスワップする(ページングファイルを使用する)可能性はほとんどありません。
  • この値が物理メモリの使用量よりもはるかに大きい場合、一部のプログラムは多くの仮想アドレススペースを割り当てていますが、まだ使用していません。
  • アプリケーションを終了すると、すべての仮想アドレス空間がクリーンアップされるため、コミットされたメモリ使用量が削減されます。

あなたの実験はこれを検証しました。アドレス空間の制限に遭遇したのではないかと思います(Windowsの32ビットプロセスは2GBに制限されています...おそらく300MBが断片化、ライブラリ、テキストに消えましたか?)。

于 2011-10-24T04:33:24.997 に答える