Как получить% использования памяти с помощью vmstat?
Мне нужно получить использование памяти в% от vmstat, но я не совсем понимаю некоторые числа, относящиеся к памяти, отображаемой в vmstat.
В частности, учитывая такой вывод
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 139728 45396 199128 1236360 1 2 4 622 3 1 51 4 43 2 0
Каков объем общей памяти системы? Это "swpd" + "free" + "buff" + "cache", всего 1620612?
Каков свободный объем памяти системы? Это 45396, как показано в столбце "бесплатно"?
Проблема в том, что они не складываются и даже не выглядят близко к тому, что сообщают "верхушки". Вывод 'top', который я взял примерно в то же время, что и 'vmstat's выше:
[...]
Mem: 4059616k total, 3965504k used, 94112k free, 200020k buffers
[...]
Итак... я предполагаю, что в vmstat должны быть скрытые номера / опции, о которых я не знал?
Мне нужно использовать "vmstat" для этой цели, а не другие команды, так как это требование указано.
В идеале, я хочу добиться от vmstat% использования памяти, как в:
<used_memory>/<total_memory> * 100%.
Спасибо!
4 ответа
То, что вы ищете, является выводом "free":
$ free
total used free shared buffers cached
Mem: 775556 759456 16100 0 22132 592484
-/+ buffers/cache: 144840 630716
Swap: 500344 21972 478372
Вот тур:
Это коробка с 768 МБ физической ОЗУ и разделом подкачки 500344 КБ.
759456KB "используется" (второй столбец, верхний ряд). Из этой "используемой" памяти 23132 КБ составляют буферы (5-й столбец, верхняя строка), а 592484 КБ (шестой столбец, верхняя строка) - кэш, оставляя 144840 КБ (2-й столбец, 2-я строка) физической памяти, используемой активными процессами.
Если учесть, что память, используемая буферами и кешем, может использоваться для процессов, то остается 630716 КБ (3-й столбец, 2-й ряд) физической памяти свободной.
Раздел подкачки, как я уже сказал, имеет размер 500344 КБ (1-й столбец, нижний ряд). 21972 КБ (2-й столбец, нижний ряд) файла подкачки используется, оставляя 478372 КБ (3-й столбец, нижний ряд) свободным.
Итак, ваше определение% свободной памяти зависит от того, подсчитываете ли вы буферы и кеш или нет, и считаете ли вы подкачку или нет.
Это должно дать вам достаточно, чтобы рассчитать процент по вашему усмотрению.
Вот вывод top и free:
$ top -n1 | grep "used," ; free
Mem: 775556k total, 751472k used, 24084k free, 20776k buffers
Swap: 500344k total, 21972k used, 478372k free, 586648k cached
total used free shared buffers cached
Mem: 775556 751344 24212 0 20776 586648
-/+ buffers/cache: 143920 631636
Swap: 500344 21972 478372
Вы можете видеть, как top и free согласуются (хотя и с небольшой разницей - это многопользовательский компьютер, и использование памяти top и free программ отражено там).
Добавьте "-s" при вызове vmstate, и вы увидите почти такой же вывод, только в другой форме:
$ vmstat -s ; free
775556 total memory
759920 used memory
674680 active memory
18440 inactive memory
15636 free memory
21892 buffer memory
594372 swap cache
500344 total swap
21972 used swap
478372 free swap
... output truncated ...
total used free shared buffers cached
Mem: 775556 759920 15636 0 21892 594372
-/+ buffers/cache: 143656 631900
Swap: 500344 21972 478372
Вы можете видеть, что vmstat показывает все те же цифры, что и бесплатные.
У меня такой же вопрос с вами и придумать формулу
vmstat -s | awk ' $0 ~ /total memory/ {total=$1 } $0 ~/free memory/ {free=$1} $0 ~/buffer memory/ {buffer=$1} $0 ~/cache/ {cache=$1} END{print (total-free-buffer-cache)/total*100}'
Я проверил это на версии vmstat из procps-ng 3.3.10 и vmstat из procps-ng 3.3.9
Я бы порекомендовал вам прочитать эту Красную книгу IBM "Руководство по производительности и настройке Linux" ( http://www.redbooks.ibm.com/abstracts/redp4285.html?Open). Он содержит подробную информацию о данных, возвращаемых многочисленными командами, и должен помочь вам.
Я обычно использовал команду "free" в Linux или "cat /proc/meminfo".
Вот функция оболочки POSIX, которая округляет желаемый процент до ближайшего целого числа (для сценариев это может быть более полезным, поскольку тесты арифметического сравнения оболочки POSIX работают только с целыми числами):
# Vmstat (derived) Used Ram Percent
vurp() { vmstat -s | { read a b ; read c d ; echo $((100*$c/$a)) ; } ; }
vurp
Вывод (в моей системе):
12
То же самое, с free
:
furp() { free | { read z; read a b c d; echo $((100*$c/$b)) ; } }