如何推断 top 命令 VSZ 和常驻内存数量活跃使用/空闲?

如何推断 top 命令 VSZ 和常驻内存数量活跃使用/空闲?

我有两个虚拟机,一个有 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度量来确定系统可以为应用程序使用的“可用”内存量,而无需进行交换。

这里对此进行了详细解释,例如:

https://superuser.com/questions/980820/what-is-the-difference-between-memfree-and-memavailable-in-proc-meminfo

我编写了以下 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

相关内容