Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Команда vmstat для начинающих

Оригинал: Linux vmstat Command Tutorial for Beginners (5 Examples)
Автор: Himanshu Arora
Дата публикации: 10 октября 2018 года
Перевод: А. Кривошей
Дата перевода: июль 2019 г.

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

В данной статье мы обсудим основы использования этой утилиты, используя несколько простых для понимания примеров. Необходимо отметить, что все примеры в этой статье были протестированы на машине с Ubuntu 18.04 LTS.

Команда vmstat

Команда vmstat в Linux выводит статистику использования виртуальной памяти. Ниже приводится ее синтаксис:

vmstat [options] [delay [count]]

И вот как справочная страница утилиты объясняет ее работу:

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

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

Ниже приведены примеры в стиле вопросов и ответов, которые должны дать вам лучшее представление о том, как работает команда vmstat:

Q1. Как использовать 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
 2  0 805624 770924  41792 838568    2   10    35    57  392  225 10  2 86  1  0

Как показывает первая строка, выходные данные разделены на шесть разделов. Справочная страница утилиты содержит подробную информацию об этих значениях. Вот выдержка:

Procs
r: количество запущенных процессов (работающих или ожидающих выполнения).
b: количество спящих процессов.

Memory
swpd: объем используемой виртуальной памяти.
free: объем свободной памяти.
buff: количество памяти, используемой в качестве буферов.
cache: объем памяти, используемой в качестве кеша.
inact: количество неактивной памяти (опция -a).
active: количество активной памяти. (опция -a)

Swap
si: объем памяти, выгруженный с диска (/s).
so: объем памяти, перенесенный на диск (/s).

IO
bi: блоки, полученные от блочного устройства (blocks/s).
bo: блоки, отправленные на блочное устройство (blocks/s).

System
in: количество прерываний в секунду, включая часы.
cs: количество переключений контекста в секунду.

CPU
Здесь проценты от общего времени процессора.
us: время, потраченное на запуск кода, не относящегося к ядру (время пользователя).
sy: время, потраченное на выполнение кода ядра (системное время).
id: время бездействия. До версии Linux 2.5.41 это включает время ожидания ввода-вывода.
wa: время, проведенное в ожидании ввода/вывода. До Linux 2.5.41, включено в idle.
st: время, украденное из виртуальной машины. До Linux 2.6.11 неизвестно.

Q2. Как заставить vmstat автоматически обновлять свой вывод?

По умолчанию vmstat выдает выходные данные один раз. Однако, если вы хотите, чтобы vmstat автоматически обновляла свои выходные данные, вы можете сделать это, указав числовое значение в качестве входных данных для команды.

Это числовое значение действует как задержка (в секундах), после которой вывод обновляется. Например:

vmstat 3

Таким образом, вывод vmstat будет обновляться каждые 3 секунды.

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 824320 1067960  20500 507612    2   10    36    56  412  296 11  2 86  1  0
 0  0 824320 1068116  20532 507176    0    0     0    39 2648 6093  4  1 93  1  0
 0  0 824320 1062420  20548 507160    0    0     0    48 2603 5895  5  1 93  1  0
 0  0 824320 1060180  20556 507152    0    0     0   289 2815 6092  4  1 94  0  0
 1  0 824320 1059940  20580 509216    0    0     0    31 2578 5937  5  1 93  1  0
...
...
...

Q3. Как заставить vmstat отображать slabinfo?

Для slabinfo вам нужно использовать параметр командной строки -m. Обратите внимание, что ядро вашего дистрибутива Linux должно поддерживать slabinfo, чтобы эта опция работала. Если поддержка есть, вам нужно запустить команду с привилегиями sudo.

sudo vmstat -m

Например, в моем случае выдержка из полученного вывода:

Cache                       Num  Total   Size  Pages
ext4_groupinfo_4k          1568   1568    144     28
drm_i915_gem_request        112    112    576     28
i915_vma                    934   1012    704     23
drm_i915_gem_object         896   1050    768     21
RAWv6                       140    140   1152     28
UDPv6                       104    104   1216     26
tw_sock_TCPv6                17     17    240     17
request_sock_TCPv6            0      0    304     26
TCPv6                        60     60   2176     15
kcopyd_job                    0      0   3312      9
dm_uevent                     0      0   2632     12
cfq_io_cq                   442    442    120     34
cfq_queue                   408    408    240     17
bsg_cmd                       0      0    216     18
mqueue_inode_cache           68     68    960     17
fuse_request                 40     40    400     20
fuse_inode                   19     19    832     19
ecryptfs_inode_cache          0      0   1024     16
...
...
...

Q4. Как сделать отчет об активности диска с помощью vmstat?

Используйте для этого параметр командной строки -D.

vmstat -D

Вот вывод этой команды в моей системе:

          21 disks 
            8 partitions 
       158637 total reads
        31589 merged reads
      7376734 read sectors
      2099724 milli reading
       198763 writes
       553378 merged writes
     11743120 written sectors
      6396664 milli writing
            0 inprogress IO
         1248 milli spent IO

Q5. Как заставить vmstat добавлять временную метку к каждой строке вывода?

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

vmstat -t
$ vmstat 2 -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                 IST
 1  0 822528 855556  36820 689220    1    9    34    54   62   68 11  2 86  1  0 2018-09-27 16:29:40
 0  0 822528 849612  36828 692792    0    0     0    30 2894 7141  7  2 91  1  0 2018-09-27 16:29:42
 1  0 822528 851820  36856 697288    0    0     0   276 3081 7072 17  2 80  1  0 2018-09-27 16:29:44
 0  0 822528 850968  36856 697420    0    0     0     0 3025 8067  7  2 91  0  0 2018-09-27 16:29:46
 0  0 822528 853480  36856 693360    0    0     0     0 2762 6285  5  1 93  0  0 2018-09-27 16:29:48
 0  0 822528 853128  36872 692796    0    0     0   140 2881 6534  6  1 91  2  0 2018-09-27 16:29:50
 0  0 822528 846924  36872 697108    0    0     0     0 2843 6637  6  2 93  0  0 2018-09-27 16:29:52

Выделенные записи показывают метку времени, включенную в каждую строку.

Заключение

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