如何计算Linux机器中的内存利用率百分比?

时间:2019-03-29 06:49:30

标签: linux bash shell automation free-command

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

到目前为止,我已经使用了free命令,但是一个或另一个OS版本似乎存在问题。某些服务器中存在问题(例如Linux CentOS 7.5.1804(3.10.0-862.14.4.el7 .x86_64)),则MEM%大于100,因为free命令输出有所不同。记住公式

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

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

我尝试从顶部命令计算内存| 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指导我哪里出了问题。

我需要一个独立于OS风格的代码来计算内存。 预先感谢。

1 个答案:

答案 0 :(得分:0)

与其直接使用free命令,不如直接使用/proc/meminfo

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

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