我有一个 Linux 系统,版本为 2.6.32-754.23.1.el6.x86_64 ([email protected])。我想知道所有正在运行的进程使用了多少物理内存。我尝试使用带有选项 -o rss 的 ps 命令来显示每个进程的驻留集大小,然后将它们相加。但是,结果比 free 命令显示的已用内存小得多。这是一个例子:
$ ps -eo rss |awk '{sum+=$1}END{print sum/1024/1024}'
4.72103
$ free -mh total
total used free shared buffers cached
Mem: 15G 14G 756M 184K 516M 977M
-/+ buffers/cache: 2098 13901 Swap: 8192 0 8192
Swap: 8.0G 0B 8.0G
$ ps --version
procps version 3.2.8
$ free -V
procps version 3.2.8
linux 版本:
$ lsb_release -a
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.8 (Final)
Release: 6.8
Codename: Final
可以看到,ps命令显示所有进程使用的物理内存总量约为4.7GB,而free命令显示使用的内存只有14GB左右。为什么会有这么大的差异?如何获得所有进程的正确物理内存使用情况?谢谢。
top 命令显示:
Mem: 16333416k total, 15557460k used, 775956k free, 528860k buffers
Swap: 8389044k total, 0k used, 8389044k free, 1000988k cached