web-dev-qa-db-ja.com

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

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

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

 $ top 
 
 top-12:16:34 up 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 
 Mem:合計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 postmaster 
 1ルート15 0 10344 680 568 S 0.0 0.0 0:39.36 init 
 2ルートRT -5 0 0 0 S 0.0 0.0 0:00.53移行/ 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ウォッチドッグ/ 0 
 5ルートRT -5 0 0 0 S 0.0 0.0 0:02.09 migration/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ウォッチドッグ/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ウォッチドッグ/ 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ウォッチドッグ/3
 14ルートRT -5 0 0 0 S 0.0 0.0 0:01.94 migration/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 migration/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移行/ 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 root RT -5 0 0 0 S 0.0 0.0 0:02.31 migration/7 
 24 root 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ルート1 0 -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 events/7 
 34 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 khelper 
28
del

先頭のメモリ使用量関連の行から:

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を監視すると、このことに気付くでしょう。

26
grs

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

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

1
Daniel Beck