我有两个虚拟机,一个有 2vCPU、4GB RAM,另一个有 4vCPU 和 8GB RAM
现在,我已经在两个虚拟机上安装/运行了具有相同内存、CPU 分配、请求和限制的相同应用程序 (k8s pods)。
观察结果
- 当转储两个虚拟机上的整个顶部输出并总结所有进程的驻留内存时,我看到两个虚拟机上的数字相似,即消耗了大约 2GB。
- 将 VIRT 列下的所有数字相加,可得出
55456748
两个虚拟机的大致情况
问题
- 但是在顶级命令摘要/进程内存信息命令中,两个虚拟机上显示的数字不同,有没有关于原因和位置的指示,如何找出内存消耗 4cPU 和 8 GB 的额外内存/根本原因?
2VCPU 4GB
$ cat /proc/meminfo
MemTotal: 3880500 kB
MemFree: 144924 kB
MemAvailable: 590280 kB
SwapTotal: 1327100 kB
SwapFree: 1261564 kB
4VCPU 8GB
$ cat /proc/meminfo
MemTotal: 8008964 kB
MemFree: 197860 kB
MemAvailable: 1470412 kB
SwapTotal: 1327100 kB
SwapFree: 1321408 kB
答案1
不要使用MemFree
,而是使用MemAvailable
度量来确定系统可以为应用程序使用的“可用”内存量,而无需进行交换。
这里对此进行了详细解释,例如:
我编写了以下 Bash 函数用于常规内存使用情况检查。您可以将代码插入到文件末尾.bash_aliases
。
function mf
{
mt=($(grep '^MemTotal:' /proc/meminfo))
ma=($(grep '^MemAvailable:' /proc/meminfo))
let mtmb=${mt[1]}/1024
let mamb=${ma[1]}/1024
let mumb="(${mt[1]}-${ma[1]})/1024"
let muse="(${mt[1]}-${ma[1]})*100/${mt[1]}"
st=($(grep '^SwapTotal:' /proc/meminfo))
sf=($(grep '^SwapFree:' /proc/meminfo))
let stmb=${st[1]}/1024
let sfmb=${sf[1]}/1024
let sumb="(${st[1]}-${sf[1]})/1024"
if (( st[1] != 0 )) ; then
let suse="(${st[1]}-${sf[1]})*100/${st[1]}"
else
suse=0
fi
printf "%17s%10s%10s%6s
Memory %9sM%9sM%9sM%5s%%
Swap %9sM%9sM%9sM%5s%%
" 'Total' 'Used' 'Av/Free' 'Use%' \
$mtmb $mumb $mamb $muse \
$stmb $sumb $sfmb $suse
}
答案2
好的,这是由于我在安装应用程序时设置了大页面配置,操作系统显然根据启用它们时指定的值来创建页面。
2VCPU
around 600 pages with each 2048k i.e 1.23 GB locked
4 vcpu
around 2048 pages with each 2048k i.e 4.2 GB locked in main memory