Linuxでメモリ使用量を正しく決定する

Linuxでメモリ使用量を正しく決定する

私が見た結果のいくつかは少し混乱しています。メモそして無料

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

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

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

したがって、私が正しく理解した場合、「実際の」使用量は「-/+バッファ/キャッシュ」の「使用済み」値でなければなりません。この場合は561です。

だから、これがすべて正しいと仮定すると、私が混乱している部分はですps aux

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

したがって、このコマンドを実行すると、次のようになります。

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

結果は、「-/+バッファ/キャッシュ」の「使用済み」列であってはなりませんかfree -m

それでは、Linuxでプロセスのメモリ使用量を正しく決定する方法は?明らかに私の論理に何か問題があるようです。

ベストアンサー1

私の答えの恥ずかしいコピー/貼り付けサーバー障害しばらく前 :-)

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

  • プロセスが分岐すると、親プロセスと子プロセスの両方が同じRSSを表示します。しかし、Linuxは書き込み中にコピーを使用するため、両方のプロセスは実際には同じメモリを使用します。プロセスの1つがメモリを変更する場合にのみ、実際にコピーされます。
    これにより、数値がRSSの合計freeよりも小さくなります。top

  • RSS値には共有メモリは含まれません。共有メモリはいずれのプロセスにも属さないため、topRSSには含まれません。
    これにより、数値がRSSの合計freeよりも大きくなります。top

この数が加算されないには、他にも多くの理由があります。この回答は、メモリ管理が非常に複雑であり、全体的なメモリ使用量を得るために単一の値を加算または減算できないことを示しています。

おすすめ記事