「top」のメモリ使用量が加算されないのはなぜですか?


28

topを実行すると、プロセステーブルの各プロセスのメモリ使用量が合計にならないように見えることがあります。

たとえば、以下のダンプでは、topは16 Gbのメモリを使用していると言います。ただし、プロセステーブルには、520 Mbを少し超える2つのプロセスしか表示されません。他の15.5 Gbの消費量を調べるにはどうすればよいですか?(私はCentOSを使用しています。)

$トップ

top-12:16:34 up 45 days、2:28、3 users、load average:0.24、0.65、0.71
タスク:合計274、実行中1、睡眠273、停止0、ゾンビ0
CPU:2.3%us、0.2%sy、0.0%ni、97.5%id、0.0%wa、0.0%hi、0.0%si、0.0%st
メモリ:合計16432032k、使用済み16340144k、91888k無料、21736kバッファ
スワップ:合計18481144k、使用済み1112k、無料18480032k、キャッシュ15624488k

  PIDユーザーPR NI VIRT RES SHR S%CPU%MEM TIME +コマンド
18159 jsmith 15 0 260m 31m 4560 S 16.6 0.2 53:35.64 python
 4795 26 15 0 260m 6608 4220 S 2.0 0.0 0:00.06ポストマスター
    1ルート15 0 10344 680568 S 0.0 0.0 0:39.36 init
    2ルートRT -5 0 0 0 S 0.0 0.0 0:00.53 migration / 0
    3ルート34 19 0 0 0 S 0.0 0.0 0:00.62 ksoftirqd / 0
    4ルートRT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog / 0
    5ルートRT -5 0 0 0 S 0.0 0.0 0:02.09移行/ 1
    6ルート34 19 0 0 0 S 0.0 0.0 0:01.32 ksoftirqd / 1
    7ルートRT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog / 1
    8ルートRT -5 0 0 0 S 0.0 0.0 0:00.99移行/ 2
    9ルート34 19 0 0 0 S 0.0 0.0 0:01.74 ksoftirqd / 2
   10ルートRT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog / 2
   11ルートRT -5 0 0 0 S 0.0 0.0 0:02.16移行/ 3
   12ルート34 19 0 0 0 S 0.0 0.0 0:01.30 ksoftirqd / 3
   13ルートRT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog / 3
   14ルートRT -5 0 0 0 S 0.0 0.0 0:01.94移行/ 4
   15ルート34 19 0 0 0 S 0.0 0.0 0:01.78 ksoftirqd / 4
   16ルートRT -5 0 0 0 S 0.0 0.0 0:00.00ウォッチドッグ/ 4
   17ルートRT -5 0 0 0 S 0.0 0.0 0:01.92移行/ 5
   18ルート34 19 0 0 0 S 0.0 0.0 0:01.30 ksoftirqd / 5
   19ルートRT -5 0 0 0 S 0.0 0.0 0:00.00ウォッチドッグ/ 5
   20ルートRT -5 0 0 0 S 0.0 0.0 0:02.06 migration / 6
   21ルート34 19 0 0 0 S 0.0 0.0 0:01.83 ksoftirqd / 6
   22ルートRT -5 0 0 0 S 0.0 0.0 0:00.00ウォッチドッグ/ 6
   23ルートRT -5 0 0 0 S 0.0 0.0 0:02.31移行/ 7
   24ルート34 19 0 0 0 S 0.0 0.0 0:01.50 ksoftirqd / 7
   25ルートRT -5 0 0 0 S 0.0 0.0 0:00.00ウォッチドッグ/ 7
   26ルート10 -5 0 0 0 S 0.0 0.0 0:00.42イベント/ 0
   27ルート10 -5 0 0 0 S 0.0 0.0 0:00.28イベント/ 1
   28ルート10 -5 0 0 0 S 0.0 0.0 0:00.37イベント/ 2
   29ルート10 -5 0 0 0 S 0.0 0.0 0:00.21イベント/ 3
   30ルート10 -5 0 0 0 S 0.0 0.0 0:00.38イベント/ 4
   31ルート10 -5 0 0 0 S 0.0 0.0 0:00.27イベント/ 5
   32ルート10 -5 0 0 0 S 0.0 0.0 0:00.52イベント/ 6
   33ルート10 -5 0 0 0 S 0.0 0.0 0:00.64イベント/ 7
   34ルート10 -5 0 0 0 S 0.0 0.0 0:00.00 khelper

回答:


26

上のメモリ使用量に関連する行から:

Mem: 16432032k total, 16340144k used, 91888k free, 21736k buffers
Swap: 18481144k total, 1112k used, 18480032k free, 15624488k cached

スワップを無視しましょう。合計メモリは、使用済みメモリと空きメモリの合計に等しくなります。一方、使用されるのは、「アプリケーションで実際に使用される」キャッシュとバッファーの合計です。したがって、あなたの場合は次のようになります:

  • Mem = 16432032k = 16340144k + 91888k;
  • 「アプリケーションで実際に使用」=使用済み-(キャッシュ+バッファ)= 16340144k-(15624488k + 21736k)= 693920k。

他の15.5 GBはキャッシュされます。これによりパフォーマンスが向上します。ただし、アプリケーションがキャッシュされたメモリの一部を必要とする瞬間に、すぐにアプリケーションに与えられます。メモリを大量に消費するアプリケーションとモニターを実行すると、これに気付くでしょうtop


1

そのリストは274 total、私にはプロセスのようには見えません。Topは通常、端末/画面に適合するもののみを表示します。ps aux代わりに使用して、rss値(またはバージョンが表示する常駐メモリ列)を合計します。

また、仮想メモリサイズを加算したくない場合は、実際には常駐(RES)列に興味があるようです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.