Назад | Перейти на главную страницу

Как получить% использования памяти с помощью 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' выше:

[...]
Mem:   4059616k total,  3965504k used,    94112k free,   200020k buffers
[...]

Итак ... Я предполагаю, что в vmstat должны быть скрытые номера / параметры, о которых я не знал?

Для этой цели мне нужно использовать vmstat, а не другие команды, поскольку это то, что указано в требовании.

Итак, в идеале, то, что я хочу получить от vmstat, - это% использования памяти, например:

<used_memory>/<total_memory> * 100%.

Спасибо!

То, что вы ищете, это результат "бесплатно":

$ free
             total       used       free     shared    buffers     cached
Mem:        775556     759456      16100          0      22132     592484
-/+ buffers/cache:     144840     630716
Swap:       500344      21972     478372

Вот экскурсия:

Это коробка с 768 МБ физической RAM и разделом подкачки 500344 КБ.

759456KB - это «использовано» (второй столбец, верхняя строка). Из этой «используемой» памяти 23132 КБ - это буферы (5-й столбец, верхняя строка), а 592484 КБ (шестой столбец, верхняя строка) - это кеш, в результате чего 144840 КБ (2-й столбец, 2-я строка) физической памяти используется активными процессами.

Если учесть, что память, используемая буферами и кешем, может использоваться для процессов, остается 630716 КБ (3-й столбец, 2-я строка) физической памяти.

Размер раздела подкачки, как я уже сказал, составляет 500344 КБ (1-й столбец, нижняя строка). 21972 КБ (2-й столбец, нижняя строка) файла подкачки уже используется, оставляя 478372 КБ (3-й столбец, нижняя строка) свободными.

Итак, ваше определение% свободной памяти зависит от того, подсчитываете ли вы буферы и кеш или нет, а также подсчитываете ли вы подкачку или нет.

Этого должно быть достаточно, чтобы вы могли рассчитать процент по своему усмотрению.


Вот вывод команды top and 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 (хотя с небольшой разницей - это многопользовательская машина, и там отражено использование памяти верхней и бесплатной программами).


Добавьте «-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 Redbook "Linux Performance and Tuning Guidelines" (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)) ; } }