为什么“顶部”中的内存使用量不累加?


28

我已经注意到,有时当我运行top时,进程表中每个进程的内存使用量似乎并不能总计。

例如,在下面的转储中,top表示我正在使用16 Gb内存。但是,进程表仅显示了使用略高于520 Mb的两个进程。我如何找出正在消耗其他15.5 Gb的数据?(我正在使用CentOS。)

$ top

顶部-12:16:34最多45天,2:28,3个用户,平均负载: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蟒蛇
 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看门狗/ 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 migration / 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 migration / 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 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 migration / 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 events / 0
   27根10 -5 0 0 0 S 0.0 0.0 0:00.28 events / 1
   28根10 -5 0 0 0 S 0.0 0.0 0:00.37 events / 2
   29根10 -5 0 0 0 S 0.0 0.0 0:00.21 events / 3
   30根10 -5 0 0 0 S 0.0 0.0 0:00.38 events / 4
   31根10 -5 0 0 0 S 0.0 0.0 0:00.27 events / 5
   32根10 -5 0 0 0 S 0.0 0.0 0:00.52 events / 6
   33根10 -5 0 0 0 S 0.0 0.0 0:00.64 events / 7
   34根10 -5 0 0 0 S 0.0 0.0 0:00.00 khelper

Answers:


26

从顶部的与内存使用相关的行:

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

让我们忽略掉交换。总内存等于已用内存和可用内存之和。另一方面,使用的是“应用程序真正使用”与缓存和缓冲区的总和。因此,您的情况如下:

  • 内存= 16432032k = 16340144k + 91888k;
  • “由应用程序真正使用” =已使用-(缓存+缓冲区)= 16340144k-(15624488k + 21736k)= 693920k。

其余的15.5 GB被缓存。这样可以提高性能。但是,在应用程序需要缓存的内存的那一刻,就会立即将其分配给它。如果您运行一些占用内存的应用程序和监视器,您会注意到这一点top


1

274 total在我看来,这份清单似乎不像是过程。顶部通常仅显示适合您终端/屏幕的内容。使用ps aux来代替,而加起来rss值(或其他常驻内存栏您的版本显示)。

您也不想累加虚拟内存大小,似乎您实际上对resident(RES)列感兴趣。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.