gpt4 book ai didi

linux - 如何计算linux机器中的内存利用率?

转载 作者:太空宇宙 更新时间:2023-11-04 11:53:08 25 4
gpt4 key购买 nike

我正在编写一个脚本来计算 Linux 系统中的内存利用率。我的脚本将部署在具有多种 Linux CentOS 版本的生产环境中。

到目前为止,我已经使用了 free 命令,但似乎一个操作系统版本或另一个有问题。问题出现在某些服务器上(例如 Linux CentOS 7.5.1804 (3.10.0-862.14.4.el7 .x86_64)) ,MEM% 大于 100,因为它们的 free 命令输出不同。牢记公式,

MEM%= 100-(((free+buffers+cached)*100)/TotalMemory). 

我需要一个脚本来计算内存百分比,无论它是什么操作系统。

我试过从 top 命令计算内存 | grep "Mem:",但它非常随意。

因此我正在使用我现在的公式。

没关系,内存计算可能很复杂,我只想要接近真实值的合理百分比值。任何建议都会非常有帮助。

total_perc=100
average=$( free -b | grep ":" | head -1 | tr -s ' ' | cut -d ':' -f2 | awk '{$1=$1};1' )
a1=$(echo $average | cut -d ' ' -f1) # Total
a2=$(echo $average | cut -d ' ' -f2) #Used
a3=$(echo $average | cut -d ' ' -f3) #Free
a4=$(echo $average | cut -d ' ' -f4) #Shared
a5=$(echo $average | cut -d ' ' -f5) #Buffers
a6=$(echo $average | cut -d ' ' -f6) #Cached
addition=$(( a3 + a5 + a6 ))
multi=$(( addition*100))
divis=$(awk -v dividend="${multi}" -v divisor="${a1}" 'BEGIN {printf "%.2f", dividend/divisor; exit(0)}')
percentage=$(awk -v no1="${total_perc}" -v no2="${divis}" 'BEGIN {printf "%.2f", no1-no2; exit(0)}')
echo "Final Memory Util Percentage : $percentage"

在某些操作系统风格中,例如:Linux CentOS 7.5.1804 (3.10.0-862.14.4.el7.x86_64)",利用率交叉,100.Kinldy 指导我哪里出错了。

我需要一个独立于操作系统风格的代码来计算内存。提前致谢。

最佳答案

不使用 free 命令,更直接的方法是查看 /proc/meminfo:

grep -oP '^MemFree: *\K[0-9]+'/proc/meminfo

这应该适用于过去十年的所有内核。此外,这种方法向内核询问空闲内存。工具还会询问内核并应用一些额外的计算,因此您实际上必须了解工具在做什么才能查看您的计算是否可靠。

关于linux - 如何计算linux机器中的内存利用率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55411902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com