![为什么free命令说的和实际消耗的内存不一样](https://linux22.com/image/182143/%E4%B8%BA%E4%BB%80%E4%B9%88free%E5%91%BD%E4%BB%A4%E8%AF%B4%E7%9A%84%E5%92%8C%E5%AE%9E%E9%99%85%E6%B6%88%E8%80%97%E7%9A%84%E5%86%85%E5%AD%98%E4%B8%8D%E4%B8%80%E6%A0%B7.png)
来自我们具有 126G 内存的 Linux VM rhel 7.5 服务器
我们有奇怪的内存行为,消耗所有可用内存,如下所示
free -g
total used free shared buff/cache available
Mem: 126 122 0 1 2 1
Swap: 10 10 0
我们有 bash 脚本可以精确计算内存消耗,这就是结果
5.2 MiB + 2.3 MiB = 7.6 MiB sshd (4)
10.2 MiB + 159.0 KiB = 10.4 MiB polkitd
12.6 MiB + 315.0 KiB = 12.9 MiB gsd-color
16.6 MiB + 5.0 KiB = 16.6 MiB node_exporter
11.3 MiB + 27.1 MiB = 38.4 MiB systemd-journald
40.4 MiB + 15.9 MiB = 56.3 MiB rsyslogd
73.3 MiB + 1.4 MiB = 74.7 MiB python2.7 (3)
226.4 MiB + 2.7 MiB = 229.2 MiB gnome-shell
1.4 GiB + 1.1 MiB = 1.4 GiB df.pll
15.7 GiB + 9.2 MiB = 15.7 GiB java (9)
22.1 GiB + 2.0 MiB = 22.1 GiB KLP-server
---------------------------------
39.6 GiB
从top
命令中我们可以看到内存实际上消耗了大约40G
那么我们怎么能从free -g
only 1G
available 中看到呢?
我们还可以看到的是:
vmware-toolbox-cmd stat balloon
81632 MB
答案1
vmware-toolbox-cmd stat balloon
81632 MB
答案是:您的系统正在使用大约 40GiB 内存,VMware 气球机制保留了 80GiB 内存,导致 报告“已使用”122GiB free
。
气球保留的内存不会被进程消耗,因此它不会出现在ps
ortop
的输出中。