Битлента
Сетевые команды и утилиты5 мин чтения·

vmstat 1: как читать столбцы r, b, si, so и wa

Разбор вывода vmstat в Linux: очередь процессов, подкачка, обмен с диском, переключения контекста и доли процессора. Что отличается в macOS.

Кратко

vmstat 1 печатает строку статистики каждую секунду. Первая строка показывает среднее с момента запуска, её стоит пропустить. Смотрите на r и b (очередь процессов), si и so (подкачка), bi и bo (диск), us, sy, id и wa (доли процессора).

Почему vmstat запускают с интервалом

Команда vmstat без аргументов печатает единственную строку со средними значениями с момента загрузки системы. Для диагностики она малоинформативна: короткий пик в среднем за несколько суток практически не виден. Поэтому на практике указывают интервал в секундах: vmstat 1 выводит новую строку каждую секунду, пока вы не нажмёте Ctrl+C.

Можно ограничить число строк вторым аргументом: vmstat 2 10 даст десять замеров с шагом в две секунды. Это удобно для скриптов и для отчёта, который вы потом покажете коллеге или в поддержке.

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

Единицы памяти по умолчанию в Linux указаны в килобайтах. Ключ -S позволяет сменить единицу: например, vmstat -S M 1 покажет мегабайты. Названия столбцов при этом не меняются.

Столбцы вывода по группам

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

ГруппаСтолбцыЧто означают
procsr, br: процессы, готовые к выполнению; b: процессы в непрерываемом ожидании
memoryswpd, free, buff, cacheподкачка, свободная память, буферы, кэш файлов
swapsi, soобъём в секунду, прочитанный из подкачки (si) и записанный в неё (so)
iobi, boблоки в секунду, прочитанные с устройств (bi) и записанные на них (bo)
systemin, csпрерывания и переключения контекста в секунду
cpuus, sy, id, wa, stпользователь, ядро, простой, ожидание ввода-вывода, украденное время

Столбец st заполнен в основном на виртуальных машинах: это время, которое гипервизор не дал гостевой системе. Если на физической машине там нули, это нормально.

Для macOS информация разбросана по двум утилитам. Команда vm_stat показывает счётчики страниц памяти, а штатная vmstat выводит свой набор столбцов, отличный от Linux. Не переносите значения столбцов из таблицы выше на macOS: сверяйтесь с man vmstat и man vm_stat на вашей системе.

Как по столбцам отличить нехватку процессора от нехватки памяти

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

  • Если r стабильно больше числа ядер, а us и sy в сумме близки к максимуму, процессор перегружен. Выясняйте, какой процесс его занимает.
  • Если r небольшое, а wa высокое и b больше нуля, процессы ждут диск или сетевое хранилище. Дальше смотрите iostat.
  • Если si и so устойчиво отличны от нуля, система активно использует подкачку: оперативной памяти не хватает или она занята сверх меры. Единичные значения без повторения тревогу не вызывают.
  • Если free мала, но cache велик, это обычно нормальная картина: Linux использует свободную память под кэш файлов и отдаёт её при необходимости. Для оценки лучше смотреть на колонку available в выводе free.
  • Если cs и in очень велики на фоне простоя процессора, возможно, много процессов или потоков постоянно просыпаются и засыпают.

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

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно

Практический сценарий: ноутбук с вентилятором на максимуме

Допустим, вентилятор шумит, а интерфейс отвечает с задержками. Откройте терминал и запустите vmstat 1 на полминуты. Дальше возможны три типичных картины.

Первая: us высок, wa близок к нулю, r больше числа ядер. Это вычислительная задача, например сборка проекта, кодирование видео или зациклившийся процесс. Найдите его через top или ps aux, отсортированный по процессору.

Вторая: wa высок, us невысок. Скорее всего, идёт интенсивная работа с диском: индексация, антивирусная проверка, резервная копия, обновление. Проверьте, какой процесс пишет или читает, с помощью iostat и lsof.

Третья: si и so ненулевые, а free близка к нулю. Памяти не хватает. Закройте тяжёлые приложения, а на постоянной основе оцените, достаточно ли оперативной памяти для ваших задач. Подробности о памяти есть на странице про free, а о перегрузке процессора и скачках нагрузки на странице про uptime и load average.

Если вы обращаетесь за помощью на форум или в поддержку, приложите вывод vmstat 1 за 30 секунд: по нему видно динамику и не нужно угадывать.

Ограничения утилиты и что делать дальше

vmstat показывает картину по системе в целом, а не по процессам. Он не назовёт виновника, а лишь подскажет, в какую сторону копать. Для конкретного процесса используют ps, top, pidstat из пакета sysstat или lsof.

Есть и другие ограничения. Данные о диске в vmstat агрегированные: bi и bo отражают суммарный поток блоков, но не показывают, какое именно устройство занято. Для разбивки по дискам нужен iostat. Столбец wa относится к ожиданию на процессоре и тоже усреднён по ядрам.

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

Если вы только начинаете, сохраните привычку: сначала uptime, затем vmstat 1, затем конкретика через ps и iostat. Такой порядок даёт общую картину, прежде чем вы углубитесь в детали.

Как сохранить замер для обращения в поддержку

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

  • Запустите vmstat 1 30 и сохраните вывод в файл через перенаправление: vmstat 1 30 > замер.txt.
  • Добавьте в файл дату командой date, чтобы было видно, когда сделан замер.
  • Укажите, что происходило в это время: какая программа была запущена, какие действия выполнялись.
  • Приложите вывод uptime и, при подозрении на диск, фрагмент iostat.
  • Не удаляйте первую строку, а лучше отметьте, что она содержит среднее с загрузки.

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

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно
vmstatlinuxпамятьпроизводительность

Часто задаваемые вопросы

Читайте также