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合計。