Rhel

為什麼免費命令說與真正的消耗記憶體不同

  • October 22, 2020

來自我們具有 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只看到1G可用的呢?

我們還可以看到:

vmware-toolbox-cmd stat balloon
81632 MB 
vmware-toolbox-cmd stat balloon
81632 MB 

答案是:您的系統正在使用大約 40GiB 的記憶體,而 80GiB 由 VMware 氣球機制保留,導致 122GiB “已使用”報告由free.

氣球保留的記憶體不會被程序消耗,因此它不會出現在psortop的輸出中。

引用自:https://unix.stackexchange.com/questions/615835