Показать статистику
0 голосов
от (4.6тыс. баллов)
Всем привет. Накидайте пожалуйста практических примеров использования утилиты vmstat. С различными ключами и для различных ситуаций. Для диагностики узких мест по системе ввода-вывода (диск), т.п. Спасибо заранее!
859 просмотров 1 ответов

1 Ответ

0 голосов
от (17.4тыс. баллов)

Утилита vmstat как правило применяется для диагностики узких мест при работе с жестким диском. Так же можно получить базовые сведения о текущем состоянии процессора (загружен - не загружен) и об использовании оперативной памяти.

Вы просили накидать примеры использования. Приведу несколько.

При запуске без параметров и ключей, вывод утилиты будет таким (я запускал на ubuntu):

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 5418604 100920 1980192    0    0     0     7    4   23  0  0 100  0  0

Разберем вывод. 

  1. Procs (процессы)
    • r - число исполняемых процессов (которые в данный момент выполняются либо ожидают выполения)
    • b - процессы в состоянии "uninterruptible sleep", т.е. заблокированные и ожидающие чего либо (например, ждет когда файл будет прочитан, либо недоступно что либо по сети)
  2. Memory (память)
    • swpd - общее количество использованной виртуальной памяти
    • free - свободная незадействованная память
    • buff - память, занятая под буферы
    • cache - количество память занятой под кеш (как правило, это дисковый кеш. Как вы можете знать или не знать, но Linux все операции чтения-записи гоняет через кеш, поэтому обычно сюда отдается вся доступная память)
  3. Swap (устройство подкачки)
    • si - "swapped in" - то есть данные, записанные в своп
    • so - "swapped out" - данные, прочитанные из своп-устройства
  4. IO (ввод-вывод)
    • bi - данные в "блоках", записанные на блочное устройство (устройство хранения данных, жесткий диск)
    • bo - данные в "блоках", прочитанняе с этого блочного устройства
  5. System
    • in - количество interrupts (прерываний) в секунду
    • cs - колчиство переключений контекста в секунду (как часто процессор вынужден переключаться между запущенными процессами)
  6. CPU (значения всех параметров ниже - в процентах)
    • us - процессорное время, занятое обработкой процессов из userspace (то есть программ, запущенных пользователем, а не ядром)
    • sy - системное время. Сколько времени процессор потратил на выполнение функций ядра операционной системы
    • id - сколько времени процессор простаивал (ничего не делал)
    • wa - время на ожидание IO. Например, диск загружен и процессор ждет пока данные не будут считаны
    • st - время, позаимствованное из виртуальных машин (stolen time). Если у вас есть виртруальные машины, работающие на данном компьютере - этот параметр расскажет сколько времени было "украдено" у этих виртуальных машин для более приоритетных задач. То есть это то время, которое было затребовано виртуальными машинами для обработки своих собственных задач, но которое система честно зажилила, потому что "гипервизор (хост-система) всегда главнее".

Как посмотреть активную и неактивную память?

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

$ vmstat -a
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa st
 0  0 205624 254020 1002680 3688928    2    1     4     1    0    0  6  1 84  2  0

Что такое активная и неактивная память обсуждалось здесь, рекомендую ознакомиться. 

Как посмотреть статистику использования памяти?

vmstat -s -S M | grep mem

Вывод будет таким:

         7786 M total memory
          465 M used memory
          991 M active memory
         1297 M inactive memory
         5280 M free memory
           98 M buffer memory

Как вывести общую статистику в виде списка?

$ vmstat -s
      7973676 K total memory
       476032 K used memory
      1014904 K active memory
      1328916 K inactive memory
      5407300 K free memory
       100936 K buffer memory
      1989408 K swap cache
            0 K total swap
            0 K used swap
            0 K free swap
       123992 non-nice user cpu ticks
         4274 nice user cpu ticks
        72947 system cpu ticks
    203152364 idle cpu ticks
        14977 IO-wait cpu ticks
            0 IRQ cpu ticks
          496 softirq cpu ticks
            0 stolen cpu ticks
       736872 pages paged in
     14161689 pages paged out
            0 pages swapped in
            0 pages swapped out
     57906371 interrupts
     97317871 CPU context switches
   1549688722 boot time
       100316 forks

Как получить данные по использованию диска?

$ vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
loop0      1      0       2       0      0      0       0       0      0      0
loop1      0      0       0       0      0      0       0       0      0      0
loop2      0      0       0       0      0      0       0       0      0      0
loop3      0      0       0       0      0      0       0       0      0      0
loop4      0      0       0       0      0      0       0       0      0      0
loop5      0      0       0       0      0      0       0       0      0      0
loop6      0      0       0       0      0      0       0       0      0      0
loop7      0      0       0       0      0      0       0       0      0      0
sr0        0      0       0       0      0      0       0       0      0      0
sda    17046     60 1473742    2784 796797 423305 191742194  231920      0     18

Данные при этом получаются "слишком общие". Можно сузить поиск и считать информацию по использованию раздела:

$ vmstat -p /dev/sda1
sda1          reads   read sectors  writes    requested writes
               17009    1471600     782970  191758610

Как вывести статистику в мегабайтах? 

По-умолчанию vmstat показывает всю информацию в килобайтах. Если нужны мегабайты:
$ vmstat -S M
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0   5325     98   1897    0    0     0     7    8    7  0  0 100  0  0

Как включить автообновление статистики в vmstat?

Иногда нужно запустить vmstat в цикле, что бы отследить нагрузку на систему в течение какого то определенного отрезка времени. Vmstat может выводить данные непрерывно либо заданное количество раз.
$ vmstat 1 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 5453224 100936 1943120    0    0     0     7    8    7  0  0 100  0  0
 0  0      0 5453216 100936 1943120    0    0     0     0   71  107  0  0 100  0  0
 0  0      0 5453216 100936 1943120

В данном примере vmstat вызывается каждую секунду, однако количество повторений ограничено тройкой (три раза выведет данные и остановится).

...