GNU/Linux >> Linux の 問題 >  >> Linux

Linux でメモリ使用量を正しく判断する

先日、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 ボックスに関する情報を取得するために常に使用している優れたツールがリストされています。


Linux
  1. Linux –単一のLinuxプロセスのメモリ使用量を制限しますか?

  2. Linux –実際のメモリ使用量?

  3. Linuxdfコマンド

  1. Linux ベースのサーバーでメモリ使用量を確認する方法

  2. 「du」コマンドを使用して Linux でのディスク使用量を確認する

  3. Linux/Unix プロセスのピーク時のメモリ使用量

  1. Linuxで単一プロセスのCPU使用率とメモリ使用率を取得しますか?

  2. Linux でのプロセス メモリ/CPU 使用量の制限

  3. Ubuntu Linux:プロセス スワップ メモリとメモリ使用量