web-dev-qa-db-ja.com

Linuxでtopはどのようにメモリの数値を計算しますか?

私は、メモリの数値がどのように合計されるかについて少し混乱しています。

私が正しく理解していれば、「実際に」使用されたメモリの量は合計 -無料 --バッファ --キャッシュ =。以下の例では、14370248k-75736k-178892k-10459552k = 3656068kになります。これは、合計メモリ(3656068/14370248)の25%です。

繰り返しになりますが、正しく理解していれば、[〜#〜] res [〜#〜]および%MEM列に示されている数値は、プロセスの物理メモリの量を示しています。 「本当に」使用します。 httpdプロセスだけの[〜#〜] res [〜#〜]値の合計は7254m、つまり7428096k(7254 * 1024)であり、これは合計メモリ(7428096/14370248)の52%です。 )。 httpdプロセスの%MEM値の合計は53%であり、十分に近い値です。

要約部分では、メモリの25%しか使用されていないのに、httpdプロセスだけでメモリの50%以上を使用していると主張しているのはなぜですか?ここで何が欠けていますか?

top - 15:37:00 up 117 days, 18:27,  6 users,  load average: 4.82, 4.44, 3.60
Tasks: 433 total,   4 running, 429 sleeping,   0 stopped,   0 zombie
Cpu(s): 59.6%us,  6.5%sy,  0.0%ni, 33.0%id,  0.1%wa,  0.0%hi,  0.8%si,  0.0%st
Mem:  14370248k total, 14294512k used,    75736k free,   178892k buffers
Swap:  8388600k total,      116k used,  8388484k free, 10459552k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
3566 mysql     21   0  554m  60m 4576 S 74.6  0.4  11422:52 mysqld
23305 Apache    15   0  327m  27m 3792 S  3.2  0.2   0:01.30 httpd
23474 Apache    15   0  327m  27m 3800 S  3.2  0.2   0:01.09 httpd
...
5
jarnoan

Httpdプロセスは、互いにフォークされているため、おそらくメモリを共有しています。コピーオンライトメカニズムのため、物理メモリに1回しか存在しない場合でも、メモリは独自の仮想メモリであると主張しています。

一般に、Linuxのメモリ出力には、この種のさまざまなボゴシティが含まれています。私はそれをあまり理解しようとはしません。プロセスの動作が本来の動作と異なるかどうかを確認すると便利です。しかし、数字は必ずしも合計されません。

2