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

iostat -x: как понять, что диск перегружен, и на что смотреть

Как пользоваться iostat в Linux и macOS: интервал, первый отчёт, столбцы await и util, отличия от vmstat и ограничения оценки загрузки диска.

Кратко

iostat выводит статистику устройств и процессора. В Linux он входит в пакет sysstat, расширенный режим включается ключом -x. Первый отчёт показывает среднее с момента запуска, дальше идут интервалы. В macOS iostat встроен, но столбцы другие.

Где взять iostat и чем он отличается в Linux и macOS

В Linux утилита iostat поставляется в пакете sysstat. На многих системах пакет не установлен по умолчанию, и команда отвечает, что она не найдена. Установка выполняется штатным менеджером пакетов вашего дистрибутива, а название пакета обычно совпадает: sysstat.

В macOS iostat уже есть в системе, но это другая реализация. Вывод там компактнее: для каждого диска показываются объём за операцию, число операций в секунду и мегабайты в секунду, затем доли процессора. Интервал задаётся ключом -w, а число повторов ключом -c. Ключ -x с таблицей расширенных показателей, привычный по Linux, в macOS не работает так же, поэтому описанные ниже столбцы относятся к Linux. Учтите и ловушку с одинаковыми буквами: ключ -c в macOS задаёт число повторов, а в Linux (sysstat) выводит только блок процессора, так что команды из одной системы нельзя переносить в другую без проверки по man iostat.

Если вам нужна утилита для быстрой проверки на чужой машине, где нет прав на установку пакетов, в Linux часть сведений можно получить из файла /proc/diskstats, но читать его сложнее. Обычно проще попросить администратора поставить sysstat или воспользоваться vmstat, который часто уже установлен.

Запуск и первый отчёт, который лучше пропустить

Типичный вызов в Linux выглядит так: iostat -x 1. Он печатает расширенную статистику каждую секунду. Как и у vmstat, первый отчёт содержит усреднённые значения с момента загрузки системы, и его оценивают отдельно от остальных.

Несколько полезных вариантов запуска:

  • iostat -x 2 5 даёт пять отчётов с интервалом в две секунды и завершается сам.
  • iostat -d 1 выводит только данные по устройствам, без блока процессора.
  • iostat -c 1 выводит только блок процессора.
  • iostat -xz 1 скрывает устройства, на которых в интервале не было активности, что сокращает шум.
  • iostat -p sda 1 показывает разбивку по разделам указанного диска; имя устройства подставьте своё.

Названия устройств зависят от системы: sda и nvme0n1 типичны для Linux, loop-устройства относятся к смонтированным образам, например к пакетам snap. Если вывод кажется слишком длинным, укажите имя нужного диска в конце команды: iostat умеет ограничивать отчёт перечисленными устройствами.

Столбцы расширенного режима

Набор столбцов -x различается между версиями sysstat: в старых вариантах встречаются avgqu-sz и svctm, в новых aqu-sz. Сверяйтесь с man iostat на своей машине. Общая логика остаётся такой.

СтолбецСмысл
r/s, w/sчисло запросов чтения и записи в секунду
rkB/s, wkB/sобъём чтения и записи, килобайт в секунду
await (в новых версиях r_await, w_await)среднее время ожидания запроса вместе со временем в очереди, мс
aqu-sz (или avgqu-sz)средняя длина очереди запросов к устройству
%utilдоля времени, когда устройство было занято обработкой запросов

Для накопителей с одной очередью, например жёстких дисков, значение %util около 100% вместе с растущим await говорит о насыщении. Для NVMe и массивов с параллельной обработкой этот показатель ведёт себя иначе: устройство способно обрабатывать несколько запросов одновременно, и %util около 100% не означает исчерпанного запаса. Оценивать в таком случае лучше по await и очереди.

Доли процессора в блоке avg-cpu включают %iowait. Это время простоя процессора, пока система ожидала ввода-вывода. Оно сигнализирует об ожидании диска, но не говорит, какой именно процесс его вызвал.

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

Как связать цифры iostat с реальными жалобами

Пример рассуждения без привязки к конкретным числам. Программа запускается дольше обычного, в интерфейсе микрозадержки. Вы открываете iostat -x 1 и видите, что на одном диске await заметно выросло по сравнению с обычным уровнем на этой же машине, а очередь не пуста. Следующий вопрос: кто создаёт нагрузку.

Для поиска процесса в Linux подойдёт pidstat -d из того же пакета sysstat или утилита iotop, если она установлена и у вас есть права администратора. Если lsof установлена (в macOS она есть в системе, в Linux её иногда нужно доустановить), она покажет, какие файлы держат открытыми процессы. На странице про lsof разобран просмотр открытых файлов процесса.

Сравнивать нужно с вашим же обычным состоянием: у домашнего SSD и у сетевого хранилища в офисе нормы разные, и универсального порога await нет. Поэтому полезно один раз записать вывод в спокойное время и хранить как ориентир.

Если ошибки чтения и записи повторяются, вместе с задержками смотрите журнал ядра командой dmesg: там фиксируются сбросы шины и ошибки ввода-вывода. Это признак проблем с накопителем, кабелем или контроллером, и тогда нужна резервная копия данных.

Типичные ошибки интерпретации

Первая ошибка: оценивать диск по первому отчёту, где значения усреднены с загрузки. Вторая: считать любой высокий %util признаком проблемы без учёта типа накопителя. Третья: сравнивать числа между разными машинами. Четвёртая: игнорировать кэш файловой системы. Если программа читает данные, которые уже лежат в кэше, обращений к диску в iostat не будет, и вывод покажет тишину при высокой скорости работы.

Ещё одна ловушка в том, что iostat видит блочные устройства, а не файлы. Поэтому нагрузка на сетевые диски, смонтированные по сети, в нём может отсутствовать: для них в Linux есть nfsiostat, а в общем случае нужно смотреть статистику самого протокола. Разделы под управлением LVM и RAID отображаются как отдельные устройства, и их цифры частично повторяют цифры физических дисков.

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

Минимальный порядок проверки диска

Чтобы не потеряться среди столбцов, придерживайтесь короткой последовательности действий.

  • Запустите iostat -xz 1 и пропустите первый отчёт.
  • Найдите устройство, на котором есть активность, и сравните await и очередь с обычным состоянием.
  • Посмотрите %iowait в блоке процессора, чтобы понять, ждёт ли система диск.
  • Найдите процесс-источник нагрузки через pidstat -d, iotop или lsof.
  • Проверьте dmesg на ошибки накопителя.

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

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

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

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