システムモニター(Ubuntu 10.04)によると、ノーチラスは450MiBを占めています。
$pmap <PID of Nautilus>
...
total 1578276K
ここで報告されたメモリは1.5GiBですかpmap
?私が何が間違っているのか、問題がどこにあるのかを推論できるように、何が450MiBを占めているのかを調べようとしています。
答え1
プログラムがどのくらいのメモリを使用するかについての単純なアイデアはありません。
出力は、pmap
プロセスによってマップされたすべての仮想メモリを記述します。マッピングは、プロセスがデータをロードしたりアクセスを要求したりするための追加のコマンドを実行することなく、ポインタを介してデータにアクセスできることを意味します。マップされた仮想メモリは常にRAMにあるとは限りません。交換するか、ファイルに入れることができます。たとえば、プログラムで使用されるすべての共有ライブラリはそれを使用するすべてのプロセスにマッピングされますが(ほとんどの場合)、システム全体のRAMには1つのコピーしか保持されず、そのコピーをメモリに完全にロードする必要はありません。メモリ(必要な部分はディスクファイルからロードされます)。 1.5GBの数値には、プロセスのコード、静的データ、共有メモリ、および独自のデータがすべて含まれています。あまり意味のある数字ではありません。
pmap
シンプルな再フォーマットです/proc/$pid/maps
。Linux /proc/id/mapsについて各列の意味を説明します。
450MBの数字(私の意見では)は、現在RAMにある非共有メモリであるプロセスの常駐セットです。これには、プロセスのみに属するデータ(交換可能)だけでなく、プロセスが書き込むために開いたファイル(後でファイルから再ロードするために削除できるディスクバッファ)も含まれます。
450 MBのメモリを分解しやすくなりました。これはプログラムの作成者の仕事であり、デバッグツールが必要です。