
Цель урока: Научиться диагностировать "бутылочное горлышко" в дисковой подсистеме. Мы узнаем, как понять, что диск перегружен (насыщение), и как с точностью до процесса найти виновника, который "убивает" диск записью или чтением.
Мы работаем от root.
Часть 1: Подготовка инструментов
В отличие от top, утилиты для дисков не всегда установлены по умолчанию. Нам понадобится пакет sysstat (набор системной статистики) и утилита iotop.
Устанавливаем:
apt update
apt install -y sysstat iotop stress-ng
(stress-ng у вас, скорее всего, остался с прошлого урока, но на всякий случай добавим и его).
Часть 2: Общая картина (iostat)
Представьте, что вы врач. Сначала вы смотрите на пациента в целом (температура, пульс), и только потом ищете больной орган.
iostat - это градусник для дисков. Он не скажет кто виноват, но скажет насколько всё плохо.
Запустим мониторинг с обновлением раз в 1 секунду. Флаги -x (расширенная статистика) и -z (скрыть неактивные диски) обязательны для удобства.
iostat -xz 1
Вы увидите таблицу, которая обновляется. Смотрим на последний столбец %util.
Ключевые метрики:
-
r/s и w/s: Количество операций чтения (read) и записи (write) в секунду.
-
rkB/s и wkB/s: Скорость в килобайтах. Это пропускная способность (как спидометр).
-
await: Среднее время ожидания ответа от диска (в миллисекундах). Если здесь цифры больше 10-20 мс для SSD - диску плохо.
-
%util (Самое важное): Насколько диск занят работой.
-
Если %util близко к 100% - это красная зона. Диск стал "узким горлышком". Процессор вынужден ждать данные, всё тормозит.
-
(Нажмите Ctrl+C для выхода).
Часть 3: Поиск виновника (iotop)
Допустим, iostat показал вам 100% util. Кто виноват? MySQL? Бэкап? Или взломанный сайт майнит криптовалюту?
Для этого есть iotop. Это как top, только для дисков.
Запускаем:
iotop
Интерфейс:
-
DISK READ / DISK WRITE: Скорость чтения/записи конкретного процесса.
-
SWAPIN: Сколько времени процесс тратит на чтение из Swap (вспоминаем прошлый урок).
-
IO: Самый важный столбец. Показывает, сколько времени процесс ждет диск. Если тут 99% - процесс полностью блокирует ввод-вывод.
Полезный трюк:
По умолчанию iotop показывает кучу процессов, которые ничего не делают.
Нажмите на клавиатуре клавишу o (буква "o" английская).
Это включит режим "Only active". Теперь вы видите только тех, кто реально пишет или читает.
(Нажмите q для выхода).
Часть 4: Практика. Убиваем диск (Стресс-тест)
Теория - это хорошо, но давайте увидим "красную зону" своими глазами.
Сценарий:
Мы запустим stress-ng, который будет бешено записывать данные на диск, имитируя ситуацию "тяжелый бэкап" или "импорт огромной базы данных".
Вам понадобятся два окна терминала.
Окно 1 (Мониторинг):
Запустите iotop. Сразу нажмите o, чтобы скрыть лишнее.
Окно 2 (Атака):
Запускаем 1 "воркера", который будет писать и удалять временные файлы (тест HDD):
stress-ng --hdd 1 --timeout 60s
Что наблюдаем в Окне 1:
-
Вверху появится процесс stress-ng-hdd.
-
В колонке DISK WRITE побегут мегабайты (скорость зависит от вашего диска).
-
Колонка IO у этого процесса (и, возможно, у jbd2 - это процесс журналирования файловой системы) станет красной и подскочит до высоких значений.
-
Попробуйте в этот момент набрать любую команду в консоли - вы можете почувствовать "лаг" (задержку).
Часть 5: Что делать, если виновник найден? (ionice)
Вы нашли процесс, который грузит диск (например, архивация логов tar), но убивать его нельзя - бэкап нужен.
Но из-за него тормозит сайт.
Как в уроке про процессор мы меняли приоритет через nice, так и для диска есть ionice.
Мы можем сказать системе: "Делай этот бэкап только тогда, когда диск свободен. Если пришел запрос к сайту - уступи дорогу".
Синтаксис:
# Класс 3 (Idle) означает "самый низкий приоритет, работай только в простое"
ionice -c 3 -p PID_ПРОЦЕССА
Пример запуска "вежливого" бэкапа:
ionice -c 3 tar -czf backup.tar.gz /var/www
Такая команда будет выполняться дольше, но пользователи сайта вообще не заметят тормозов.
Часть 6: Резюме
Диагностика тормозов сервера всегда идет по цепочке:
-
Смотрим Load Average (uptime). Если высокий - идем дальше.
-
Смотрим CPU (htop). Если процессор свободен, а LA высокий - значит, ждем диск.
-
Смотрим RAM (free, vmstat). Нет ли свапинга? (Если есть - диск умирает из-за памяти).
-
Смотрим Disk (iostat). Видим %util 100%.
-
Ищем негодяя через iotop.
Главные инструменты:
-
iostat -xz 1 - Общая температура больницы (ищем %util).
-
iotop (с нажатой o) - Имена и фамилии нарушителей.
-
ionice - Способ успокоить тяжелые фоновые задачи.
В Уроке 68 мы разберем последний компонент производительности - Сеть.
Мы узнаем, как понять, кто "съел" весь интернет-канал, используя iftop, и как диагностировать сетевые задержки в реальном времени.
Перейти к просмотру - УРОК №68.
Промо-код: PROMO15 - скидка 15%!
Введите при оформлении первого заказа на сайте: Hosting-VDS.com

