Как рассчитать процент использования памяти в машине Linux? - PullRequest
0 голосов
/ 29 марта 2019

Я пишу скрипт для расчета процента использования памяти в системе Linux. Мой сценарий будет развернут в производстве, которое имеет много разновидностей Linux CentOS.

До сих пор я использовал команду free, но, похоже, проблема с одной или другой версией ОС. Проблема в некоторых серверах (например, Linux CentOS 7.5.1804 (3.10.0-862.14.4.el7). .x86_64)), MEM% больше 100, так как выходные данные свободных команд отличаются в них. Имея в виду формулу,

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 укажет мне, где я ошибаюсь.

Мне нужен независимый от ОС код для расчета памяти. Заранее спасибо.

1 Ответ

0 голосов
/ 29 марта 2019

Вместо использования команды free гораздо более простым способом будет поиск в /proc/meminfo:

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

Так должно быть со всеми ядрами последнего десятилетия. Также этот подход запрашивает ядро ​​о свободной памяти. Инструменты также запрашивают ядро ​​и применяют некоторые дополнительные вычисления, так что вам действительно нужно понять, что делают инструменты, чтобы убедиться в надежности ваших расчетов.

...