Мониторинг дискового ввода-вывода с помощью iostat и dstat
Введение
Мониторинг дискового ввода-вывода является одной из ключевых задач при эксплуатации серверов в хостинговой инфраструктуре. Дисковая подсистема напрямую влияет на работу веб-сервисов, баз данных, виртуальных машин, контейнеров и фоновых задач. Даже при наличии достаточного объёма оперативной памяти и свободных процессорных ресурсов перегруженный или медленный диск способен стать узким местом всей системы.
Данный мануал предназначен для системных администраторов, DevOps-инженеров и владельцев серверов. В нём рассматриваются утилиты iostat и dstat, принципы их работы, интерпретация показателей и практический подход к поиску узких мест дискового I/O в хостинговой среде.
Общие сведения и принципы работы
Дисковый I/O в серверной инфраструктуре
Дисковый ввод-вывод включает операции чтения и записи данных на блочные устройства. В реальных сценариях хостинга нагрузку на дисковую подсистему чаще всего создают:
- базы данных (MySQL, MariaDB, PostgreSQL);
- веб-приложения с динамическим контентом;
- почтовые сервисы;
- резервное копирование и синхронизация данных;
- логирование;
- swap и временные файлы;
- пользовательские скрипты и cron-задачи.
Узкие места могут возникать из-за медленных накопителей, высокой конкуренции между процессами, неоптимальных планировщиков I/O, некорректной работы кэширования или особенностей виртуализации.
Назначение iostat и dstat
iostat — утилита из пакета sysstat, предназначенная для сбора детальной статистики по загрузке CPU и дисковых устройств. Основная задача iostat — показать, насколько активно используется конкретный диск, есть ли очередь запросов и каково среднее время ожидания операций.
dstat – универсальный инструмент мониторинга, отображающий в реальном времени статистику сразу по нескольким подсистемам: CPU, память, диск, сеть, процессы. Он позволяет сопоставлять дисковую активность с общей нагрузкой на сервер и удобен для оперативной диагностики.
Эти утилиты дополняют друг друга: iostat даёт точную картину на уровне устройств, а dstat – контекст всей системы.
Предпосылки и требования
Перед началом анализа должны быть выполнены следующие условия:
- Операционная система Linux (Debian, Ubuntu, AlmaLinux, Rocky Linux, CentOS).
- Доступ к серверу по SSH.
- Права root или возможность выполнения команд через sudo.
Проверка версии ОС:
cat /etc/os-release
Установка необходимых пакетов.
Debian / Ubuntu:
sudo apt update
sudo apt install sysstat dstat
CentOS / RHEL / AlmaLinux / Rocky Linux:
sudo yum install sysstat dstat
sudo dnf install sysstat dstat
Проверка работы sysstat:
systemctl status sysstat
Если служба активна, будет показана соответствующая информация:
root@server:~# systemctl status sysstat ● sysstat.service - Resets System Activity Logs Loaded: loaded (/usr/lib/systemd/system/sysstat.service; enabled; preset: enabled) Active: active (exited) since Tue 2025-12-23 10:35:35 UTC; 16min ago Docs: man:sa1(8) man:sadc(8) man:sar(1) Main PID: 731 (code=exited, status=0/SUCCESS) CPU: 7ms
Пошаговое рассмотрение и анализ
Базовый анализ дисков с помощью iostat
Утилита iostat используется для оценки загрузки процессора и дисковой подсистемы, а также для выявления задержек и очередей I/O.
Синтаксис:
sudo iostat [options] [interval] [count]
Наиболее используемые параметры:
- -x — расширенная статистика;
- -d — данные только по дискам;
- -k — вывод в килобайтах;
- -p — статистика по разделам или конкретному устройству.
Базовый пример:
sudo iostat -x
Динамический анализ:
sudo iostat -xk 5 3
Интервал и количество выборок позволяют отслеживать изменение нагрузки во времени, а не усреднённое состояние с момента загрузки системы.
Пример вывода iostat:

Ключевые показатели CPU:
- %iowait — доля времени, в течение которого CPU простаивает в ожидании операций I/O. Рост этого показателя указывает на влияние диска на общую производительность.
- %steal — актуален для виртуальных серверов и показывает потерянное время CPU.
Ключевые показатели диска:
- %util — процент времени, когда диск был занят. Значения, стабильно превышающие 80–90 %, указывают на насыщение устройства.
- r_await — среднее время (мс) выполнения операции чтения (включая очередь).
- w_await — среднее время (мс) выполнения операции записи (включая очередь).
- aqu-sz — (avg queue size) средняя длина очереди запросов к диску. Значение > 1 уже указывает на формирование очереди. Значение > 2–4 для HDD / > 1–2 для SSD — признак того, что диск не справляется с нагрузкой.
Разница между await и svctm показывает, создаётся ли задержка очередью или физической скоростью диска.
Если await лишь незначительно превышает svctm (разница < 20–30%), задержки в основном создаются самим диском (медленное физическое чтение/запись).
Если await значительно больше svctm (разница > 50–100%), основная задержка создаётся очередью запросов (aqu-sz будет высоким), это говорит о перегрузке диска множеством параллельных запросов.
В современных версиях iostat (как в примере) svctm не выводится, так как его расчёт ненадёжен. Для анализа используется связка await + aqu-sz: высокий await при малом aqu-sz (~0) — медленный диск; высокий await при высоком aqu-sz (>1) — диск перегружен запросами.
Анализ общей картины с помощью dstat
dstat применяется для наблюдения за системой в реальном времени и корреляции дисковой нагрузки с другими ресурсами.
Примеры команд:
dstat -d
dstat --disk-util
dstat -rd --disk-util
dstat -D vda,sda
Пример запуска с интервалом:
dstat -rd --disk-util 1 5
При анализе следует обращать внимание на:
- рост iowait в CPU;
- пики записи или чтения;
- одновременную активность сети и диска (резервные копии, синхронизация).
Пример вывода dstat:
dstat -rd --disk-util 1 5 --io/total- -dsk/total- vda- read write| read write|util 0 4.00 | 0 76k|0.50 0 29.5 | 0 240k|0.20 0 1.00 | 0 4096B| 0 0 0 | 0 0 | 0 0 1.00 | 0 32k| 0
Сравнение dstat и iostat:
| Критерий | iostat | dstat |
|---|---|---|
| Точность данных | Высокая | Высокая |
| Режим реального времени | Ограничен | Отличный |
| Исторические данные | Есть (sar) | Нет |
| Цветовой вывод | Нет | Да |
| Расширяемость | Нет | Плагины |
| CSV экспорт | Нет | Да |
| Загрузка CPU | Низкая | Средняя |
dstat особенно полезен при кратковременных всплесках нагрузки, которые не всегда заметны в iostat.
Выявление узких мест дискового I/O
Для быстрой диагностики используются следующие команды:
sudo iostat -mx 2
sudo iostat -p /dev/vda 2 5
sar -d 1 5
Типичные признаки проблемы:
- %util выше 80 % в течение длительного времени;
- await выше 20–30 мс для SSD или выше 50–100 мс для HDD;
- aqu-sz больше 2–3, что указывает на накопление очереди.
В примере используется диск /dev/vda — это виртуальный диск (VirtIO) на виртуальном сервере. В физических серверах и других окружениях диски могут называться иначе.
- /dev/sdX (например, /dev/sda) — обычные SATA/SAS/USB-диски
- /dev/nvmeXnY (например, /dev/nvme0n1) — NVMe-накопители
- /dev/vdX — виртуальные диски
Определение процессов, создающих высокую нагрузку на дисковый I/O
После того как с помощью iostat и dstat установлено наличие перегрузки дисковой подсистемы, следующим шагом является определение конкретных процессов, инициирующих интенсивные операции чтения или записи. Анализ на уровне устройств без выявления источника нагрузки не позволяет принять корректные меры.
Использование iotop
Основным инструментом для поиска процессов, активно использующих диск, является утилита iotop.
sudo iotop -ao
Параметры команды:
- -a — отображение накопительной статистики с момента запуска процесса, что позволяет выявлять фоновые задачи с длительным I/O;
- -o — вывод только тех процессов, которые в данный момент выполняют операции ввода-вывода.
Пример вывода:
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 11056 be/4 mysql 0.00 B 3.44 M 0.00 % 0.76 % mysqld 2580 be/4 rsync 0.00 B 23.48 M 0.00 % 1.17 % rsync
В выводе iotop особое внимание следует обращать на поля DISK READ, DISK WRITE и процент времени I/O. Как правило, источниками нагрузки выступают процессы баз данных, резервного копирования, синхронизации файлов или пользовательские скрипты.
Использование pidstat для анализа I/O по процессам
Для более формализованного и повторяемого анализа может применяться pidstat, входящий в пакет sysstat.
pidstat -d 1
Данная команда выводит статистику дискового ввода-вывода по каждому процессу с интервалом в одну секунду. Это удобно для выявления кратковременных всплесков активности и сопоставления их с другими метриками системы.
pidstat особенно полезен в ситуациях, когда нагрузка появляется периодически и не всегда успевает быть зафиксирована iotop.
Использование lsof для анализа файловой активности
В случаях, когда необходимо понять, с какими именно файлами или каталогами работает процесс, применяется утилита lsof.
lsof +D /path
Где /path — это конкретный каталог, в пределах которого требуется определить активные файлы и процессы. Например, это может быть каталог базы данных, директория резервных копий или область временных файлов.
Команда позволяет установить, какие процессы в данный момент удерживают файловые дескрипторы и выполняют операции в указанном пути, что особенно полезно при анализе нагрузки со стороны приложений.
Анализ контекста нагрузки
Выявление процесса с высокой дисковой активностью не является конечной целью. Администратору необходимо оценить контекст его работы:
- является ли нагрузка ожидаемой для данного сервиса;
- выполняется ли процесс в подходящее время (например, резервное копирование в часы пик);
- можно ли изменить расписание или параметры работы;
- допустимо ли снижение приоритета ввода-вывода.
Такой подход позволяет отличить штатную нагрузку от проблемной и выбрать корректный способ оптимизации.
Проверка корректности анализа
Корректность проведённого анализа подтверждается в случае, если:
- пики %util, await или aqu-sz в iostat совпадают по времени с активностью процессов в iotop или pidstat;
- рост iowait в dstat совпадает с дисковыми операциями, а не с загрузкой CPU;
- повторные замеры показывают воспроизводимую картину нагрузки.
Для накопления данных и последующего анализа рекомендуется использовать логирование:
sar -d 1 100 > io.log
Это позволяет зафиксировать поведение дисковой подсистемы на протяжении заданного периода и использовать данные при разборе инцидентов.
Типичные ошибки и особенности эксплуатации
В практике эксплуатации хостинговых серверов наиболее часто встречаются следующие проблемы:
- выполнение резервного копирования и синхронизации данных в часы пик;
- активное использование swap при недостатке оперативной памяти;
- неподходящий планировщик I/O для типа накопителя;
- отсутствие приоритетизации фоновых задач.
Для снижения влияния фоновых процессов на производительность рекомендуется использовать утилиту ionice, для управления приоритетом операций ввода-вывода (I/O) процесса, которая позволяет снизить влияние фоновых задач на отзывчивость системы.
Пример использования:
ionice -c3 rsync /source /destination
Ключевые приоритеты:
- -c1 (realtime) — самый высокий приоритет. Используется для критичных к задержкам задач. Может полностью заблокировать другие процессы.
- -c2 (best-effort) — по умолчанию для большинства процессов. Допускает уточнение приоритета (от 0 (высокий) до 7 (низкий)).
- -c3 (idle) — фоновый. Процесс получит доступ к диску только тогда, когда его не используют другие. Безопасен и рекомендуется для фоновых операций (резервное копирование, синхронизация данных).
В данном примере процесс rsync выполняется с самым низким приоритетом I/O, минимизируя влияние на основную работу системы. Использование ionice позволяет минимизировать влияние фоновых процессов без необходимости их полного отключения.
Заключение
Мониторинг дискового I/O является неотъемлемой частью поддержки производительности и стабильности серверной инфраструктуры. Утилиты iostat и dstat позволяют выявить факты перегрузки и оценить состояние дисковой подсистемы, а инструменты iotop, pidstat и lsof — определить конкретные процессы и характер их нагрузки.
Регулярное применение описанного подхода, корректная интерпретация метрик и управление приоритетами ввода-вывода позволяют снизить время отклика сервисов, повысить предсказуемость нагрузки и обеспечить выполнение требований SLA. В дальнейшем данная методика может быть расширена за счёт централизованного мониторинга и автоматизации анализа I/O-нагрузки.