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

Linux – Linuxのメモリ使用量を正しく判断しますか?

psから見た結果のいくつかに少し混乱しています および無料

私のサーバーでは、これはfree -mの結果です

[[email protected] ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          2048       2033         14          0         73       1398
-/+ buffers/cache:        561       1486
Swap:         2047         11       2036

Linuxがメモリを管理する方法についての私の理解は、ディスク使用量をRAMに保存するため、後続の各アクセスがより高速になるということです。これは「キャッシュされた」列で示されていると思います。さらに、「バッファ」列に示されているように、さまざまなバッファがRAMに保存されます。

したがって、私が正しく理解していれば、「実際の」使用量は「-/ + buffers / cache」の「used」値、この場合は561であると想定されます。

したがって、すべてが正しいと仮定すると、私をスローする部分はps auxの結果です。 。

psについての私の理解 結果として、6番目の列(RSS)は、プロセスがメモリに使用するサイズをキロバイト単位で表します。

したがって、このコマンドを実行すると:

[[email protected] ~]# ps aux | awk '{sum+=$6} END {print sum / 1024}'
1475.52

結果は、free -mの「-/+buffers/cache」の「used」列になるべきではありません。 ?

では、Linuxでプロセスのメモリ使用量を適切に判断するにはどうすればよいですか?どうやら私の論理には欠陥があります。

承認された回答:

先日、serverfaultから恥知らずに私の答えをコピーして貼り付けました🙂

Linuxの仮想メモリシステムはそれほど単純ではありません。すべてのRSSフィールドを合計して、報告された値をusedで取得することはできません。 free 。これには多くの理由がありますが、最も大きな理由をいくつか取り上げます。

  • プロセスがフォークすると、親と子の両方が同じRSSで表示されます。ただし、Linuxはコピーオンライトを採用しているため、両方のプロセスが実際に同じメモリを使用しています。プロセスの1つがメモリを変更した場合にのみ、実際に複製されます。
    これにより、freeが発生します。 topよりも小さい数値 RSS合計。

  • RSS値には共有メモリは含まれていません。共有メモリは1つのプロセスによって所有されていないため、top RSSには含まれていません。
    これにより、freeが発生します topよりも大きい数値 RSS合計。


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

  2. 例で説明されたLinuxの無料コマンド

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

  1. sar、ps、および free を使用して Linux でメモリ使用量を計算する方法

  2. Linux で R のメモリ使用量を制限する

  3. Linuxでユーザーのメモリ使用量を見つける方法

  1. Linuxのメモリ使用量

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

  3. Linux free はメモリ使用量が高いことを示していますが、top はそうではありません