В статье разбирается утилита 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. Она может быть использована для того, чтобы анализировать производительность системы и распределение виртуальной памяти. Помимо статистики по виртуальной памяти она также показывает статистику использования центрального процессора, файла подкачки и ввода / вывода.