Як отримати% використання пам'яті за допомогою vmstat?


9

Мені потрібно отримати об'єм пам'яті у% від 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%.

Дякую!


Відповіді:


20

Те, що ви шукаєте, - це результат "безкоштовно":

$ 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-й рядок) фізичної пам'яті, яка використовується активними процесами.

Якщо ви вважаєте, що пам'ять, яка використовується буферами та кешем, може бути використана для процесів, то 630716KB (3-й стовпець, 2-й ряд) фізичної пам'яті залишається вільною.

Як я вже сказав, розділ swap становить 500344 КБ (1-й стовпець, нижній ряд). 21972KB (2-й стовпчик, нижній рядок) файлу swap використовується, залишаючи 478372KB (3-й стовпець, нижній рядок) вільним.

Отже, ваше визначення% вільної пам’яті залежить від того, чи підраховуєте ви буфери та кеш, чи ні, і ви рахуєте своп чи ні.

Це повинно дати вам достатньо, щоб продовжувати обчислювати відсоток, як вважаєте за потрібне.


Ось вихід верхнього та безкоштовного:

$ 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

Ви можете бачити, наскільки згодні та вільні (хоча і з невеликою різницею - це багатокористувацька машина, і використання пам'яті верхніх та безкоштовних програм відображається там).


Додайте "-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 показує всі ті ж цифри, що і безкоштовно.


Найкраща відповідь, яку я знайшов ще на цю суперечливу тему!
rinogo

2

У мене те саме питання з вами, і я придумав формулу

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


1

Я рекомендую вам ознайомитись із цією книгою IBM Redbook "Посібник з продуктивності та налаштування Linux" ( http://www.redbooks.ibm.com/abstracts/redp4285.html?Open ). У ньому є подробиці даних, повернених численними командами, і вони повинні вам допомогти.

Я зазвичай використовував команду "безкоштовно" в Linux або "cat / proc / meminfo".


0

Ось функція оболонки 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)) ; } }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.