我读得越多,就越困惑。我想生成一个进程及其内存消耗(物理+虚拟)的列表。
到目前为止,这是我所做的:
- 我取每个进程的 VSZ,并将其乘以 1024(以字节为单位)
- 我使用 RSS,并做了同样的事情
- 然后我用 RSS 减去 VSZ,因为 VSZ 已经包含 RSS
我没有显示所有线程,而是对具有相同用户+通信的进程进行了总结。
这给了我一个类似这样的列表:
MEM VMEM PMEM User Command
16.27 GB 15.47 GB 811.73 MB apache httpd
2.37 GB 2.19 GB 186.12 MB mysql mysqld
372.99 MB 320.18 MB 52.81 MB memcached memcached
985.78 MB 954.60 MB 31.18 MB root httpd
MEM 列基本上是 VMEM(VSZ - RSS)+ PMEM(RSS)。
但我对此有点困惑。Apache 生成了约 10 个线程,而此列表显示它消耗了 16 GB 内存。硬盘只有约 14 GB,而我们的 RAM 为 8 GB。
于是我想:“尽管每个线程的 VSZ 都不同,但也许它是每个线程的绝对值”。因此,如果我取 VSZ 列并减去每个线程的 RSS,我会得到以下结果:
MEM VMEM PMEM User Command
1.38 GB 680.54 MB 737.68 MB apache httpd
2.55 GB 2.37 GB 186.09 MB mysql mysqld
425.80 MB 372.99 MB 52.81 MB memcached memcached
1016.96 MB 985.78 MB 31.18 MB root httpd
我心想:“嗯,这一定是真的!”
问题是,我说得对吗?我简直不敢相信 Apache 消耗了 16 GB 的内存。
我是不是在做什么可怕的错误的事情?
更新:使用时我得到了相同的值top
。它也是一台 CentOS 机器。