Как использовать команду vmstat в Linux

Ваш компьютер с Linux или macOS использует виртуальную память. Узнайте, как это влияет на использование вашей системой физической памяти, ресурсов ЦП и жесткого диска.

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

Ваш компьютер оснащен ограниченным объемом физической памяти, называемым оперативная память (БАРАН). Эта оперативная память должна управляться ядром и совместно использоваться операционной системой и любыми запущенными приложениями. Если эти комбинированные требования требуют большего объема памяти, чем физически установлено на вашем компьютере, что может сделать ядро?

Linux и Unix-подобные операционные системы, такие как macOS, могут использовать пространство на жестком диске, чтобы помочь им управлять потребностями в памяти. Зарезервированная область на жестком диске, называемая «областью подкачки», может использоваться как расширение ОЗУ. Это виртуальная память.

Ядро Linux может записывать содержимое блока памяти в пространство подкачки и освобождать эту область ОЗУ для использования другим процессом. Выгруженная, также называемая «выгружаемой» память может быть извлечена из области подкачки и восстановлена ​​в ОЗУ, когда это потребуется.

Конечно, скорость доступа к выгружаемой памяти ниже, чем к памяти, хранящейся в ОЗУ. И это не единственный компромисс. В то время как виртуальная память действительно позволяет Linux управлять потребностями в памяти, использование виртуальной памяти создает дополнительную нагрузку на другие части компьютера.

Ваш жесткий диск должен выполнять больше операций чтения и записи. Ядро — и, следовательно, ЦП — должно выполнять больше работы, поскольку оно выгружает память, меняет местами память и поддерживает вращение всех пластин, чтобы удовлетворить потребности в памяти различных процессов.

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

Команда vmstat

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

vmstat

vmstat в окне терминала

Отображается краткая таблица значений.

вывод vmstat в окне терминала

Есть столбцы под заголовками Procs, Memory, Swap, IO, System и CPU. Последний столбец (самый правый столбец) содержит данные, относящиеся к ЦП.

vmstat выводит правые столбцы в окне терминала

Вот список элементов данных в каждом столбце.

Proc

r: количество запущенных процессов. Это процессы, которые были запущены и либо выполняются, либо ожидают следующего всплеска циклов ЦП с квантованием времени.
b: количество процессов в непрерывном сне. Процесс не спит, он выполняет системный вызов блокировки, и его нельзя прервать, пока он не завершит свое текущее действие. Обычно процесс — это драйвер устройства, ожидающий освобождения некоторого ресурса. Любые прерывания в очереди для этого процесса обрабатываются, когда процесс возобновляет свою обычную деятельность.

  Как использовать Tidal Music из командной строки в Linux

объем памяти

swpd: объем используемой виртуальной памяти. Другими словами, сколько памяти было выгружено.,
free: объем свободной (в настоящее время неиспользуемой) памяти.
buff: объем памяти, используемой в качестве буферов.
cache: объем памяти, используемой в качестве кеша.

Обмен

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

IO

bi: блоки, полученные от блочного устройства. Количество блоков данных, используемых для обмена виртуальной памяти обратно в ОЗУ.
bo: блоки отправляются на блочное устройство. Количество блоков данных, используемых для обмена виртуальной памяти из ОЗУ в пространство подкачки.

Система

in: количество прерываний в секунду, включая часы.
cs: количество переключений контекста в секунду. Переключение контекста — это когда ядро ​​переключается с обработки в системном режиме на обработку в пользовательском режиме.

Процессор

Все эти значения представляют собой проценты от общего времени процессора.

us: время, потраченное на выполнение кода, отличного от ядра. То есть, сколько времени тратится на обработку времени пользователя и на обработку хорошего времени.
sy: время, потраченное на выполнение кода ядра.
id: время простоя.
wa: время ожидания ввода или вывода.
st: Время, украденное с виртуальной машины. Это время, когда виртуальная машина должна дождаться, пока гипервизор закончит обслуживание других виртуальных машин, прежде чем она сможет вернуться и обратиться к этой виртуальной машине.

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

Мы можем заставить vmstat регулярно обновлять эти цифры, используя значение задержки. Значение задержки указывается в секундах. Чтобы статистика обновлялась каждые пять секунд, мы использовали бы следующую команду:

vmstat 5

vmstat 5 в окне терминала

Каждые пять секунд vmstat будет добавлять в таблицу еще одну строку данных. Вам нужно будет нажать Ctrl + C, чтобы остановить это.

вывод из vmstat 5 в окне терминала

Использование значения счетчика

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

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

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

vmstat 5 4

vmstat 5 4 в окне терминала

После четырех обновлений vmstat автоматически останавливается.

вывод vmstat 5 4 в окне терминала

Смена единиц

Вы можете выбрать отображение статистики памяти и свопа в килобайтах или мегабайтах, используя параметр -S (символ единицы измерения). Это должно сопровождаться одним из k, K, m или M. Они представляют:

  Как использовать унифицированный пульт для управления ПК с Linux

k: 1000 байт
K: 1024 байта
m: 1000000 байт
M: 1048576 байт

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

vmstat 10 -S M

vmstat 10 -SM в окне терминала

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

вывод из vmstat 10 -SM в окне терминала

Активная и неактивная память

Если вы используете параметр -a (активный), столбцы баффа и кеш-памяти заменяются столбцами «неактивный» и «активный». Как они предполагают, они показывают количество неактивной и активной памяти.

Чтобы увидеть эти два столбца вместо столбцов buff и cache, включите параметр -a, как показано:

vmstat 5 -a -S M

vmstat 5 -a -SM в окне терминала

На неактивные и активные столбцы влияет опция -S (символ единицы).

вывод vmstat 5 -a -SM в окне терминала

Вилки

Ключ -f отображает количество разветвлений, которые произошли с момента загрузки компьютера.

Другими словами, это показывает количество задач, которые были запущены (и, для большей части, закрыты снова) с момента загрузки системы. Каждый процесс, запускаемый из командной строки, увеличивает эту цифру. Каждый раз, когда задача или процесс порождает или клонирует новую задачу, это число будет увеличиваться.

vmstat -f

vmstat -f в окне терминала

Дисплей вилок не обновляется.

Отображение Slabinfo

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

Как вы можете себе представить, ядро ​​снова и снова выделяет и освобождает память для множества различных типов объектов данных, которые оно должно обрабатывать. Чтобы сделать это максимально эффективным, здесь используется система, называемая плитами. Это форма кеширования.

Память, выделенная, используемая и больше не требуемая для определенного типа объекта данных ядра, может быть повторно использована для другого объекта данных того же типа без освобождения и перераспределения памяти. Думайте о блоках как о заранее выделенных, сделанных на заказ сегментах оперативной памяти для собственных нужд ядра.

Чтобы просмотреть статистику по плитам, используйте параметр -m (плиты). Вам нужно будет использовать sudo, и вам будет предложено ввести пароль. Поскольку вывод может быть довольно длинным, мы сокращаем его количество.

sudo vmstat -m | less

sudo vmstat -m |  меньше в окне терминала

На выходе пять столбцов. Эти:

Кэш: имя кеша.
num: количество активных в данный момент объектов в этом кэше.
total: общее количество доступных объектов в этом кэше.
size: размер каждого объекта в кеше.
pages: общее количество страниц памяти, которые имеют (по крайней мере) один объект, связанный в данный момент с этим кешем.

вывод sudo vmstat -m |  меньше в окне терминала

Нажмите q, чтобы оставить меньше.

Отображение счетчиков событий и статистики памяти

Чтобы отобразить страницу счетчиков событий и статистики памяти, используйте параметр -s (статистика). Обратите внимание, что это строчная буква «s».

vmstat -s

vmstat -s в окне терминала

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

  Почему Linux systemd по-прежнему вызывает разногласия после всех этих лет

Например, выходные данные по умолчанию объединяют как хорошее, так и плохое пользовательское время ЦП в столбце «us». Отображение -s (статистика) перечисляет эту статистику отдельно.

вывод vmstat -s в окне терминала

Отображение статистики диска

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

vmstat -d | less

vmstat -d |  меньше в окне терминала

Для каждого диска отображаются три столбца: «Чтение», «Запись» и «Ввод-вывод».

вывод vmstat -d |  меньше в окне терминала

IO — крайний правый столбец. Обратите внимание, что столбец sec в IO измеряется в секундах, но основанная на времени статистика в столбцах чтения и записи измеряется в миллисекундах.

вывод vmstat -d |  меньше в окне терминала

Вот что означают столбцы:

Читает

total: общее количество операций чтения с диска.
merged: общее количество сгруппированных чтений.
секторы: общее количество секторов, которые были прочитаны.
мс: Общее количество времени в миллисекундах, которое использовалось для чтения данных с диска.

пишет

total: общее количество операций записи на диск.
merged: общее количество сгруппированных записей.
секторы: общее количество записанных секторов.
мс = Общее количество времени в миллисекундах, которое было использовано для записи данных на диск.

IO

cur: количество текущих операций чтения или записи на диск.
sec: время в секундах, затрачиваемое на любые выполняемые операции чтения или записи.

Отображение сводной статистики диска

Чтобы быстро просмотреть сводную статистику активности вашего диска, используйте параметр -D (сумма диска). Обратите внимание на заглавную букву «D.»

vmstat -D

vmstat -D в окне терминала

Количество дисков может выглядеть чрезмерно большим. Компьютер, использованный для исследования этой статьи, работает под управлением Ubuntu. В Ubuntu каждый раз, когда вы устанавливаете приложение из Snap, создается псевдофайловая система squashfs, которая подключается к устройству / dev / loop.

К сожалению, многие команды и утилиты Linux считают эти записи устройств жесткими дисками.

вывод vmstat -D в окне терминала

Отображение статистики раздела

Чтобы просмотреть статистику, относящуюся к определенному разделу, используйте параметр -p (раздел) и укажите идентификатор раздела в качестве параметра командной строки.

Здесь мы рассмотрим раздел sda1. Цифра 1 означает, что это первый раздел на sda устройства, который является основным жестким диском для этого компьютера.

vmstat -p sda1

vmstat -p в окне терминала

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

вывод vmstat -p sda1 в окне терминала

Заглянуть под капот

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

vmstat может предоставить вам массу полезной информации. Теперь вы знаете, как получить к нему доступ и что это значит. И предупрежден, значит, вооружен — когда вам нужно засучить рукава и провести диагностику, вы поймете, что на вашей стороне есть vmstat.