私が見た結果のいくつかは少し混乱しています。メモそして無料。
私のサーバーではこれが結果です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値には共有メモリは含まれません。共有メモリはいずれのプロセスにも属さないため、
top
RSSには含まれません。
これにより、数値がRSSの合計free
よりも大きくなります。top
この数が加算されないには、他にも多くの理由があります。この回答は、メモリ管理が非常に複雑であり、全体的なメモリ使用量を得るために単一の値を加算または減算できないことを示しています。