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