Ответ
Для анализа производительности дискового ввода-вывода (I/O) использую несколько инструментов, в зависимости от задачи.
1. iostat (из пакета sysstat) — основная утилита для мониторинга I/O:
# Вывод расширенной статистики каждую секунду
$ iostat -dx 1
# Ключевые метрики в выводе:
Device r/s w/s rkB/s wkB/s await %util
sda 25.0 7.0 100.0 28.0 1.20 12.5
# Где:
# r/s, w/s — операций чтения/записи в секунду
# rkB/s, wkB/s — килобайт в секунду
# await — среднее время выполнения I/O-операции (мс). Высокое значение (>10-20мс) указывает на перегрузку.
# %util — процент загрузки устройства. Значение >80-90% часто означает bottleneck.
2. iotop — аналог top для дискового I/O (показывает процессы):
$ sudo iotop -o # Показать только активные процессы, выполняющие I/O
3. dstat — универсальный мониторинг (включая I/O):
$ dstat -d # Дисковая активность
$ dstat -cdl --disk-util # Комбинированный вывод (CPU, load, disk utilization)
4. Практические сценарии диагностики:
- Высокий
awaitпри низком%util: Обычно указывает на проблему с приложением или очередь на уровне ОС. - Высокий
%utilс низкой пропускной способностью (rkB/s/wkB/s): Много мелких операций (random I/O), что типично для баз данных. Решение — переход на SSD или настройка RAID. - Для мониторинга в продакшене настраиваю сбор метрик через node_exporter (
node_disk_io_time_seconds_total,node_disk_read_time_seconds_total) в Prometheus с алертами на аномалии.