У меня есть две виртуальные машины, одна с 2vCPU, 4GB RAM и другая с 4vCPU и 8GB RAM
Теперь я установил / запускал одно и то же приложение (модули k8s) с одинаковой памятью, распределением ЦП, запросами, ограничениями на обеих виртуальных машинах.
Наблюдения
55456748
более или менее на обоих vm's вопрос
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
OK , Это произошло из-за конфигурации hugepages, которую я задал при установке приложения, ОС создает страницы, видимо, на основе значений, указанных при их включении.
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
Не используйте 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
}