为什么“top”中的内存使用量没有加起来?

del*_*del 30 memory linux top

我注意到有时当我运行top 时,进程表中每个进程的内存使用量似乎加起来不等于总数。

例如,在下面的转储中,top 表示我正在使用 16 Gb 内存。但是,进程表只显示了两个使用 520 Mb 多一点的进程。如何找出消耗其他 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(s): 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 680 568 S 0.0 0.0 0:39.36 初始化
    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 迁移/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 迁移/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 迁移/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

grs*_*grs 27

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

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

让我们忽略交换。总内存等于已用内存和可用内存的总和。另一方面,Used 是“应用程序真正使用的”与缓存和缓冲区的总和。所以,在你的情况下是这样的:

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

其他 15.5 GB 被缓存。这提高了性能。但是,在应用程序需要部分缓存内存的那一刻,它会立即提供给它。如果您运行一些内存占用较大的应用程序并监视top.