В статье разбирается утилита vmstat, которая показывает статистику использования виртуальной памяти в системе Linux.

Утилита vmstat

Утилита vmstat поможет вам увидеть статистику использования виртуальной памяти и другую информацию. Получить справку по этой утилите можно здесь, или выполнив команду man 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      0 426176  24312 342728    0    0  1469   104  124  543  2  4 94  0  0

Такой отчет покажет текущую статистику, но вы можете задать два числа: период обновления и количество повторений. А также вы можете указать опцию -t, чтобы к каждому выводу добавлялась временная метка. Вот пример с боевого сервера:

$ vmstat -t 1 10
procs ---------memory----------------- ---swap-- -----io---- --system---- ------cpu----- -----timestamp-----
 r  b   swpd free      buff cache      si   so    bi    bo     in     cs us sy id wa st                 MSK
16  0 265472 54387148  4    106845584  0    0     32   175      0      0 11  3 86  0  0 2022-11-01 15:58:09
13  0 265472 54403704  4    106846768  0    0    320   712  74894 731747 21 14 64  0  0 2022-11-01 15:58:10
10  0 265472 54393196  4    106847040  0    0    256   576  72100 741796 21 15 64  0  0 2022-11-01 15:58:11
11  0 265472 54398920  4    106847760  0    0    500  2776  69038 737106 17 14 69  0  0 2022-11-01 15:58:12
11  0 265472 54381888  4    106849120  0    0    156  1172  58559 788580 17 14 69  0  0 2022-11-01 15:58:13
12  0 265472 54379228  4    106849952  0    0    176 19000  94241 719521 20 16 64  0  0 2022-11-01 15:58:14
16  0 265472 54363852  4    106850400  0    0    328  1624  64964 775258 21 17 62  0  0 2022-11-01 15:58:15
 9  0 265472 54339972  4    106850688  0    0   4172   468  83688 758811 17 17 66  0  0 2022-11-01 15:58:16
14  0 265472 54334308  4    106850800  0    0    304  6428  81084 739349 19 14 67  0  0 2022-11-01 15:58:17
12  0 265472 54355960  4    106851456  0    0     52   352  80705 758715 22 14 64  0  0 2022-11-01 15:58:18

Итак, разберём полученную информацию:

  • Блок procs
    • r — количество процессов выполняемых в данный момент или находящихся в очереди на выполнение процессором;
    • b — количество процессов, ожидающих операции ввода / вывода, то есть в состоянии беспробудного сна;
    • в итоге, здесь видно что load average должен равняться 12 -14, и в реальности в этот момент он был 11.75. А ещё видим, что нагружен именно процессор а не ввод / вывод.
    • Кстати, если много процессов со статусом R, а процессор не загружен, при этом load average большой, то это означает что не хватает именно ядер. У вас слишком много одновременных запросов к CPU, и он все просто не успевает обработать.
  • Блок memory
    • swpd — объем используемой виртуальной памяти;
    • free — объем неиспользуемой памяти (без buff/cache);
    • buff — объем памяти, используемый в качестве буфера;
    • cache — объем памяти, используемый в качестве дискового кэша;
    • в итоге, видно что использование памяти особо не колеблется;
  • Блок swap
    • si (swap in) — блоков в секунду считываемых из swap в память;
    • so (swap out) — блоков в секунду перемещаемых из памяти в swap;
    • здесь видно что система не свопит, так что всё хорошо;
  • Блок io
    • bi (blocks in) — блоков в секунду считанных с диска;
    • bo (blocks out) — блоков в секунду записанных на диск;
    • по сути, здесь видна небольшая нагрузка на диск;
  • Блок system
    • in (interrupts) — количество прерываний в секунду;
    • cs (context switches) — количество переключений между задачами;
  • Блок cpu
    • us (user time) — % времени ЦПУ, занятый на выполнение пользовательских задач;
    • sy (system time) — % времени ЦПУ, занятый на выполнение задач ядра;
    • id (idle) — % времени когда ЦПУ бездействовал;
    • wa — % времени ЦПУ, занятый на ожидание операций ввода / вывода;
    • st — сколько времени ЦПУ было украдено у виртуальной машины гипервизором (имеет смысл только при виртуализации, будет расти если виртуальной машине выделить больше ядер, чем есть физически у гипервизора).
  • Блок timestamp — временная метка, которая была добавлена, так как я использовал опцию -t.

Получение статистики

Для того чтобы получить статистическую информацию нужно использовать опцию -s. Вот пример с боевого сервера:

$ vmstat -s
    528112640 K total memory
    369568448 K used memory
    130614736 K active memory
     46758468 K inactive memory
     50973244 K free memory
            4 K buffer memory
    107570944 K swap cache
     33554428 K total swap
       265472 K used swap
     33288956 K free swap
   2492459418 non-nice user cpu ticks
        86136 nice user cpu ticks
    459727349 system cpu ticks
  19835377079 idle cpu ticks
      5215794 IO-wait cpu ticks
            0 IRQ cpu ticks
    198669279 softirq cpu ticks
            0 stolen cpu ticks
   7437593806 pages paged in
  40345165760 pages paged out
      4289951 pages swapped in
     16768739 pages swapped out
   2045656791 interrupts
   1368046475 CPU context switches
   1660114237 boot time
   1038794648 forks

Описание вывода:

  • Total memory — количество оперативной памяти;
  • Used memory — количество используемой памяти;
  • Active memory — количество виртуальной памяти, которая используется процессами в данный момент;
  • Inactive memory — количество виртуальной памяти, которая выделена, но сейчас не используется процессами;
  • Free memory — количество свободной памяти, которую можно использовать прямо сейчас (сюда не входит буфер и дисковый кэш);
  • Buffer memory — количество занятой памяти буфером;
  • Swap cache — количество занятой памяти дисковым кэшем;
  • Total swap — количество выделенной памяти на swap;
  • Used swap — количество используемой памяти в swap;
  • Free swap — количество свободной памяти в swap;
  • Non-nice user cpu ticks — количество тиков процессора с повышенным приоритетом;
  • Nice user cpu ticks — количество тиков процессора с обычным приоритетом;
  • System cpu ticks — количество тиков процессора для процессов ядра;
  • Idle cpu ticks — количество тиков процессора для процессов простоя;
  • IO-wait cpu ticks — количество тиков процессора, когда он ждал систему ввода / вывода;
  • IRQ cpu ticks — количество тиков процессора, когда он получал запросы на прерывания;
  • Softirq cpu ticks — количество тиков процессора, когда он получал программные прерывания;
  • Stolen cpu ticks — количество тиков процессора, когда виртуальная машина украла процессорное время;
  • Pages paged in — количество страниц памяти, записанных в дисковый кэш;
  • Pages paged out — количество страниц памяти, прочитанных из дискового кэша;
  • Pages swapped in — количество страниц памяти, записанных в swap;
  • Pages swapped out — количество страниц памяти, прочитанных из swap;
  • Interrupts — количество прерываний с момента загрузки;
  • CPU context switches — количество переключений контекста;
  • Boot time — временная отметка с момента последней загрузки (количество секунд от 1 января 1970);
  • Forks — количество forks (когда 1 процесс порождает другой процесс) с момента загрузки.

Итог

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


Сводка
Утилита vmstat
Имя статьи
Утилита vmstat
Описание
В статье разбирается утилита vmstat, которая показывает статистику использования виртуальной памяти в системе Linux

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *