先日、serverfault から恥知らずに私の回答をコピー/貼り付けしました :-)
Linux の仮想記憶システムはそれほど単純ではありません。すべての RSS フィールドを合計して、報告された値 used
を取得することはできません。 free
まで .これには多くの理由がありますが、最大のものをいくつか取り上げます。
-
プロセスがフォークすると、親と子の両方が同じ RSS で表示されます。ただし、Linux はコピー オン ライトを採用しているため、両方のプロセスが実際には同じメモリを使用しています。プロセスの 1 つがメモリを変更した場合にのみ、メモリが実際に複製されます。
これにより、free
が発生しますtop
よりも小さい数値 RSS 合計。 -
RSS 値には共有メモリは含まれません。共有メモリはどのプロセスにも所有されていないため、
top
RSS には含まれません。
これにより、free
が発生します。top
より大きい数 RSS 合計。
加算されるメモリ番号を探している場合は、smem を参照してください:
<ブロック引用>smem は、Linux システムのメモリ使用量に関する多数のレポートを作成できるツールです。既存のツールとは異なり、smem はプロポーショナル セット サイズ (PSS) を報告できます。これは、仮想メモリ システム内のライブラリとアプリケーションによって使用されるメモリの量をより意味のある形で表したものです。
通常、物理メモリの大部分は複数のアプリケーション間で共有されるため、常駐セット サイズ (RSS) として知られるメモリ使用量の標準測定値は、メモリ使用量を大幅に過大評価します。代わりに、PSS は各共有領域の各アプリケーションの「公正な配分」を測定して、現実的な尺度を提供します。
ここに例を示します:
# smem -t
PID User Command Swap USS PSS RSS
...
10593 root /usr/lib/chromium-browser/c 0 22868 26439 49364
11500 root /usr/lib/chromium-browser/c 0 22612 26486 49732
10474 browser /usr/lib/chromium-browser/c 0 39232 43806 61560
7777 user /usr/lib/thunderbird/thunde 0 89652 91118 102756
-------------------------------------------------------------------------------
118 4 40364 594228 653873 1153092
だから PSS
共有メモリが考慮されているため、興味深いコラムです。
RSS
とは異なります 加算することに意味があります。ここでは、ユーザーランド プロセスで合計 654Mb を取得します。
システム全体の出力は、残りについて伝えます:
# smem -tw
Area Used Cache Noncache
firmware/hardware 0 0 0
kernel image 0 0 0
kernel dynamic memory 345784 297092 48692
userspace memory 654056 181076 472980
free memory 15828 15828 0
----------------------------------------------------------
1015668 493996 521672
つまり、1Gb RAM 合計 =654Mb ユーザーランド プロセス + 346Mb カーネル メモリ + 16Mb 無料
(数 Mb のギブまたはテイク)
全体でメモリの約半分がキャッシュ (494Mb) に使用されています。
おまけの質問 :ユーザーランド キャッシュとカーネル キャッシュとは何ですか?
ところで、何か視覚的に試してみてください:
# smem --pie=name
本当に良いツールは pmap
です 特定のプロセスの現在のメモリ使用量をリストします:
pmap -d PID
詳細については、man ページ man pmap
を参照してください。 また、すべてのシステム管理者が知っておくべき 20 の Linux システム監視ツールもご覧ください。これには、Linux ボックスに関する情報を取得するために常に使用している優れたツールがリストされています。