Цель урока: Научиться диагностировать "бутылочное горлышко" в дисковой подсистеме. Мы узнаем, как понять, что диск перегружен (насыщение), и как с точностью до процесса найти виновника, который "убивает" диск записью или чтением.

Мы работаем от 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.

Ключевые метрики:

  1. r/s и w/s: Количество операций чтения (read) и записи (write) в секунду.

  2. rkB/s и wkB/s: Скорость в килобайтах. Это пропускная способность (как спидометр).

  3. await: Среднее время ожидания ответа от диска (в миллисекундах). Если здесь цифры больше 10-20 мс для SSD - диску плохо.

  4. %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:

  1. Вверху появится процесс stress-ng-hdd.

  2. В колонке DISK WRITE побегут мегабайты (скорость зависит от вашего диска).

  3. Колонка IO у этого процесса (и, возможно, у jbd2 - это процесс журналирования файловой системы) станет красной и подскочит до высоких значений.

  4. Попробуйте в этот момент набрать любую команду в консоли - вы можете почувствовать "лаг" (задержку).

Часть 5: Что делать, если виновник найден? (ionice)

Вы нашли процесс, который грузит диск (например, архивация логов tar), но убивать его нельзя - бэкап нужен.
Но из-за него тормозит сайт.

Как в уроке про процессор мы меняли приоритет через nice, так и для диска есть ionice.

Мы можем сказать системе: "Делай этот бэкап только тогда, когда диск свободен. Если пришел запрос к сайту - уступи дорогу".

Синтаксис:

# Класс 3 (Idle) означает "самый низкий приоритет, работай только в простое"
ionice -c 3 -p PID_ПРОЦЕССА

Пример запуска "вежливого" бэкапа:

ionice -c 3 tar -czf backup.tar.gz /var/www

Такая команда будет выполняться дольше, но пользователи сайта вообще не заметят тормозов.

Часть 6: Резюме

Диагностика тормозов сервера всегда идет по цепочке:

  1. Смотрим Load Average (uptime). Если высокий - идем дальше.

  2. Смотрим CPU (htop). Если процессор свободен, а LA высокий - значит, ждем диск.

  3. Смотрим RAM (freevmstat). Нет ли свапинга? (Если есть - диск умирает из-за памяти).

  4. Смотрим Disk (iostat). Видим %util 100%.

  5. Ищем негодяя через iotop.

Главные инструменты:

  • iostat -xz 1 - Общая температура больницы (ищем %util).

  • iotop (с нажатой o) - Имена и фамилии нарушителей.

  • ionice - Способ успокоить тяжелые фоновые задачи.

В Уроке 68 мы разберем последний компонент производительности - Сеть.
Мы узнаем, как понять, кто "съел" весь интернет-канал, используя iftop, и как диагностировать сетевые задержки в реальном времени.

Перейти к просмотру - УРОК №68.

подарок Промо-код: PROMO15 - скидка 15%! огонь

Введите при оформлении первого заказа на сайте: Hosting-VDS.com

авторское право цифровые решения

Помог ли вам данный ответ? 0 Пользователи нашли это полезным (1 голосов)