Как проверить загрузку и производительность дисков (I/O) в Linux?

«Как проверить загрузку и производительность дисков (I/O) в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для анализа производительности дискового ввода-вывода (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 с алертами на аномалии.