iotop — инструмент диагностики ввода-вывода (I/O) в Linux. Показывает список процессов с их текущей дисковой активностью: скоростью чтения (Read) и записи (Write) в КБ/с или МБ/с. Требует прав root или sudo. Устанавливается через пакетный менеджер: apt install iotop.
Как работает
Запуск и основные опции:
iotop # интерактивный режим
iotop -o # только процессы с активным I/O
iotop -d 2 # обновление каждые 2 секунды
iotop -a # суммарный I/O с момента старта
В интерактивном режиме столбцы: TID (thread ID), PRIO (приоритет I/O), USER, DISK READ, DISK WRITE, SWAPIN, IO%, COMMAND. Последний столбец IO% показывает процент времени, которое поток ожидает завершения операции ввода-вывода.
iotop использует интерфейс ядра Linux taskstats для получения статистики I/O отдельных процессов — доступен с ядра 2.6.20 (2007).
Диагностика нагрузки
Типичные сценарии: высокая нагрузка на диск снижает производительность сервера — через iotop определяем виновника. Возможные причины: некорректный MySQL-запрос без индекса читает гигабайты данных, скрипт бэкапа создаёт лишние копии в неподходящее время, вирус/майнер активно пишет на диск, журналирование файловой системы при большом количестве мелких файлов.
История
iotop разработан Гильемом Фромом в 2007 году на Python. Переписан на C в 2014 году для снижения накладных расходов. Активно поддерживается и входит в репозитории всех основных дистрибутивов Linux.
Связь с хостингом
На VPS и выделенных серверах iotop — стандартный инструмент при troubleshooting производительности. При жалобах на медленную работу сайта и высоком I/O wait в top — iotop покажет конкретный процесс, создающий нагрузку. Сопутствующие инструменты: iostat (общая статистика), blktrace (трассировка блочных устройств).
Использование iotop
iotop -o — только активные процессы. iotop -b -n 5 — batch-режим, 5 итераций (для скриптов). Колонки: DISK READ (чтение), DISK WRITE (запись), SWAPIN (swap-операции), IO% (доля времени в I/O ожидании). Процессы сортируются по суммарной I/O нагрузке.
Диагностика дисковых проблем
Высокий IO% у конкретного процесса → нагрузка от него. Высокий SWAPIN → нехватка RAM, система использует swap. iostat -x 2 (sysstat) — статистика по дискам: %util > 80% = диск перегружен. blktrace — детальная трассировка операций для глубокого анализа.
Оптимизация I/O на хостинге
Выявление «тяжёлых» запросов MySQL через slow query log. Вынос tmp-директорий PHP/MySQL на tmpfs (RAM-диск). Планировщик I/O: для SSD — none или mq-deadline (не CFQ). Мониторинг I/O через Netdata с алертами на высокую нагрузку.
Журналирование и I/O
Файловые системы с журналированием (ext4, XFS, ZFS) снижают риск потери данных при сбое питания. XFS: лучше для больших файлов и высокого I/O. ext4: стандарт для системных разделов. ZFS: CoW-семантика + checksumming, но требует больше RAM. Для high-I/O БД-серверов: отдельный раздел XFS с noatime,nodiratime.
Оптимизация I/O для баз данных
PostgreSQL: отдельный tablespace для временных таблиц (temp_tablespaces на faster диск). MySQL: innodb_flush_method=O_DIRECT (обход OS page cache). Scheduler: echo mq-deadline > /sys/block/nvme0n1/queue/scheduler для NVMe. fstrim для SSD в хостинге снижает write amplification.