EUR
european

EUR

usa

USD

Russian Ru
Ex. VAT Ex. VAT 0%

Мониторинг дискового ввода-вывода с помощью 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:

Example iostat output

Ключевые показатели 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, что указывает на накопление очереди.

Info

В примере используется диск /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-нагрузки.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA