Изучаем статистику виртуальной памяти с помощью vmstat.

В системах Linux существует большое количество инструментов для мониторинга системы. vmstat — это один из них.

С помощью этой утилиты можно получить статистику использования виртуальной памяти, системных процессов, памяти, подкачке, прерываниях, ввод-вывод блочными устройствами, активности диска и центрального процессора. vmstat — является очень важной частью мониторинга в Linux. 

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

Базовый синтаксис vmstat.

Базовый синтаксис команды vmstat следующий:

$ vmstat [options] [delay[count]]
  • [options]: вы можете изменить вывод по умолчанию с помощью опций.
  • [delay[count]]. — установка задержки и частоты обновления информации.

И, как говорилось выше, опции можно не использовать. И если вы попытаетесь запустить на своем экране 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 4586948   4532 958900    0    0     0     2    1   11  1  0 99  0  0

Использование vmstat

Есть несколько опций для использования с 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      0 4606004   4548 966192    0    0     0     2    7   17  1  0 99  0  0

Выход по умолчанию имеет шесть заголовков со следующими именами: procs, memory, swap, io, system и CPU.

  • procs — запущенные процессы, имеют две подкатегории r и b
    • r — означает исполняемый процесс. Он показывает количество процессов, которые запущены или ожидают выполнения.
    • b — число заблокированных процессов
  • memory — этот раздел отвечает за статистику в отношении памяти. Здесь имеется четыре подраздела
    • swpd: использование файла подкачки
    • free: свободная память
    • buff: объем памяти, используемой в качестве буфера
    • cache: объем кэш-памяти.
  • swap: сведения об использовании файла подкачки.
    • si: количество выгружаемых данных с диска (диск => память)
    • so: количество выгружаемых данных на диск (память => диск)
  • io — информация о блочных устройствах или файлах
    • bi: количество блоков отправленных с блочного устройства
    • bo: количество блоков отправленных на блочное устройство
  • system — информация о системных прерываниях и переключениях контекста.
    • in: количество прерываний в секунду.
    • cs: количество переключений состояний процесса.
  • cpu: информация о нагрузке на ЦП (отображается в процентах)
    • us: время потраченное на запуск пользовательского ПО (пользовательского пространства)
    • sy: время потраченное на запуск процессов из ядра (в пространстве ядра)
    • id: время простоя
    • wa: время ожидания IO (ввода/вывода)
    • st: среднее время ожидания завершения процесса.

Поиск активной и неактивной памяти.

Неактивная и активная память не является частью вывода по умолчанию. Но можно легко найти неактивное и активное использование памяти, используя параметр -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      0 4560008 610600 471456    0    0     0     2   18    5  1  0 99  0  0

Неактивная память — это пространство, которое недавно использовалось, а активная память используется запущенными в данный момент программами.

Изменить единицы измерения в выводе vmstat.

Вывод по умолчанию показывает информацию в килобайтах, что на сегодняшний день не всегда актуально. Вы можете изменить единицы измерения различных размеров, таких как k, K, m или, M, с помощью параметров -S или ——unit.

Чтобы показать данные в мегабайтах, вы можете ввести следующую команду.

$ vmstat -a -S M 
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      0   4474    574    460    0    0     0     2   18    5  1  0 99  0  0

Жалко, что Гигабайтов — нет, в скором времени, наверное очень актуально будет.

Найти количество fork с начала загрузки.

Fork показывают количество процессов, которые были созданы из родительского процесса, а процесс fork называется дочерним по отношению к родительскому процессу.

Мы можем найти количество fork с помощью -f или —forks.

$ vmstat -f
      1442646 forks

Приведенный выше вывод показывает количество fork, созданных с момента загрузки системы.

Проверить состояние диска с помощью vmstat.

Вы можете использовать vmstat для определения производительности диска вместе с информацией о памяти, vmstat будет отображать количество периферийных устройств хранения, операций чтения и записи вместе с вводом-выводом.

Для этого используется параметр -d или —disk

$ vmstat -d 
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
sda      317      1   91170     227    103    143    1968     112      0      0
sdb    14240     70 1100269    7811 431943 113120 8710739  292177      0    314
sr0        9      0       3       5      0      0       0       0      0 774883

На нем показаны три блочных устройства, sda и sdb для SSD и sr0 в качестве CD-ROM.

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

$ vmstat -D
            3 disks
            1 partitions
        28692 total reads
           71 merged reads
      2283967 read sectors
        15607 milli reading
       976344 writes
       113263 merged writes
     17423642 written sectors
       591969 milli writing
            0 inprogress IO
       775511 milli spent IO

Получить всю информацию о памяти, аналогичную /proc/meminfo

Для получение информации, такой ​​как память, ЦП, время загрузки, форки, события и т. д., нужно использовать параметр -s.

Добавляем несколько параметров для красивого вывода и получаем следующее

$ vmstat -s -S M
         5747 M total memory
          305 M used memory
          460 M active memory
          575 M inactive memory
         4473 M free memory
            4 M buffer memory
          964 M swap cache
         1023 M total swap
            0 M used swap
         1023 M free swap
      1013132 non-nice user cpu ticks
        27740 nice user cpu ticks
       378347 system cpu ticks
    195851048 idle cpu ticks
         9834 IO-wait cpu ticks
       140679 IRQ cpu ticks
       106710 softirq cpu ticks
            0 stolen cpu ticks
       595719 pages paged in
      4362616 pages paged out
            0 pages swapped in
            0 pages swapped out
    337351830 interrupts
    354454159 CPU context switches
   1670788740 boot time
      1453745 forks

Хотя вы можете найти всю эту информацию в /proc/meminfo, но там не сможете контролировать размерность соответствующих столбцов. Так что vmstat удобнее.

Использование отметки времени.

Вы можете изменить вывод vmstat по умолчанию с указанием временной метки, который может быть полезен в параметрах задержки. Чтобы напечатать временную метку, используйте -t или –timestamp.

$ vmstat -t
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
 1  0      0 4580344   4564 988024    0    0     0     2   19    6  1  0 99  0  0 2022-12-23 09:44:05

Использование задержки, чтобы найти последнюю информацию о памяти.

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

Если вам требуется распечатывать системную информацию каждые 2 секунды, введите следующую команду. Для отмены выполнения, нажмите Ctrl-C.

$ vmstat 2
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 4580240   4564 988044    0    0     0     2   19    6  1  0 99  0  0
 0  0      0 4580044   4564 988044    0    0     0     0  527  534  1  1 99  0  0
 0  0      0 4580016   4564 988044    0    0     0     0  535  523  0  1 99  0  0
 0  0      0 4579884   4564 988044    0    0     0     0  553  529  1  1 99  0  0

Вы также можете автоматически остановить вывод vmstat после определенного количества подсчетов или обновлений. Например, если вы хотите отображать системную информацию каждые 2 секунды, но команда должна прерываться после пяти циклов, то можно использовать следующую команду

$ vmstat 2 5
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 4673324   4580 898648    0    0     0     2    4   12  1  0 99  0  0
 0  0      0 4673064   4580 898648    0    0     0     0  322  359  0  1 99  0  0
 0  0      0 4673208   4580 898648    0    0     0     0  327  368  0  1 99  0  0
 1  0      0 4673040   4580 898648    0    0     0     9  310  357  1  0 99  0  0
 0  0      0 4673064   4580 898648    0    0     0     0  337  381  0  0 99  0  0

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

Чтобы решить эту проблему, вы можете использовать -t или —timestamps вместе с задержкой и количеством.

$ vmstat -t 2 5
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
 1  0      0 4673472   4580 898656    0    0     0     2    4   12  1  0 99  0  0 2022-12-23 19:49:36
 0  0      0 4672992   4580 898656    0    0     0     0  395  399  0  1 99  0  0 2022-12-23 19:49:38
 0  0      0 4673352   4580 898656    0    0     0     0  343  354  0  1 99  0  0 2022-12-23 19:49:40
 0  0      0 4673084   4580 898656    0    0     0     0  343  364  0  1 99  0  0 2022-12-23 19:49:42
 0  0      0 4673224   4580 898656    0    0     0     0  348  369  1  0 99  0  0 2022-12-23 19:49:44

Заключение.

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

Was this helpful?

0 / 0

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