我注意到有时候我跑步的时候顶部,进程表中各个进程的内存使用量加起来好像不等于总数。
例如,在下面的转储中,top 显示我使用了 16 Gb 内存。但是,进程表仅显示两个进程使用了略多于 520 Mb 的内存。我如何才能找出消耗了其他 15.5 Gb 的进程?(我使用的是 CentOS。)
$ 顶部 顶部 - 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 python 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 khelper
答案1
从顶部的内存使用相关行:
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
。
答案2
在我看来,该列表不像是274 total
进程。Top 通常只显示适合您的终端/屏幕的内容。请使用ps aux
并添加rss
值(或您的版本显示的任何常驻内存列)。
您也不想把虚拟内存大小加起来,看来您实际上对常驻(RES
)列感兴趣。