- Home »

iostat: CPU и I/O-метрики для оценки здоровья системы
Если ты когда-нибудь ловил себя на мысли: «Почему мой сервер тормозит?», «Откуда эти лаги в приложении?», «Куда делась вся производительность, ведь нагрузка вроде обычная?» — добро пожаловать, ты не одинок! Сегодня разбираем инструмент, который реально помогает понять, что происходит под капотом Linux-системы, — iostat. Это не просто еще одна команда в арсенале, а твой личный детектив по расследованию загадочных тормозов и просадок.
В этой статье расскажу, как iostat помогает оценить здоровье системы, что означают его метрики, как быстро настроить мониторинг и на что смотреть в первую очередь. Будет много примеров, реальные кейсы, таблички, советы по автоматизации и даже парочка хаков. Погнали!
Зачем вообще нужен iostat и чем он может помочь?
Проблема банальна: сервер работает, а вот сервисы — не очень. Ты перезапускаешь контейнеры, чистишь кэш, лезешь в логи, а толку мало. В 90% случаев причина кроется в двух вещах:
- Процессор (CPU) забит под завязку — всё в режиме ожидания или жрёт ресурсы какой-то процесс.
- Диски (I/O) не справляются: очереди запросов, медленный отклик, затыки на чтение/запись.
Вот тут и выручает iostat — инструмент, который показывает, как именно загружены процессор и дисковая подсистема. Это must-have для любого, кто настраивает VPS, выделенный сервер, облако или даже домашний NAS.
Что такое iostat? Как он работает?
iostat — это часть пакета sysstat (кстати, очень годный набор утилит для мониторинга). Его задача — собирать и показывать статистику по CPU и дисковому вводу-выводу (I/O). Причём не просто суммарно, а по каждому устройству, с деталями по времени ожидания, загрузке и пр.
Как работает iostat:
- Собирает данные из ядра Linux (из /proc/stat, /proc/diskstats и др.).
- Показывает срезы (суммарно с момента запуска системы и за интервал).
- Позволяет быстро понять, где затык: в процессоре или в дисках.
Структура вывода:
avg-cpu: %user %nice %system %iowait %steal %idle Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
- avg-cpu — загрузка процессора по категориям.
- Device — статистика по каждому блочному устройству (диск, SSD, RAID, LVM и т.д.).
Какие метрики реально важны?
Вот топ-5 метрик, которые стоит держать в голове:
- %iowait — сколько времени CPU ждёт данных с диска. Если больше 10-15%, есть затык на I/O.
- %user — сколько времени уходит на пользовательские процессы.
- %system — системные процессы (ядро, драйверы).
- tps — транзакций в секунду (чтение/запись на диск).
- kB_read/s, kB_wrtn/s — скорость чтения/записи по каждому устройству.
Краткая памятка по интерпретации:
Метрика | Что значит | Когда бить тревогу |
---|---|---|
%iowait | CPU ждёт диск | > 10-15% долгое время |
tps | Операций в сек | Слишком много/мало — зависит от диска |
kB_read/s, kB_wrtn/s | Скорость I/O | Близко к лимиту диска — возможен затык |
%user/%system | Загрузка CPU | Если оба > 90% — CPU bottleneck |
Как быстро настроить iostat? Практика и примеры
Первым делом — ставим пакет sysstat (iostat входит в его состав).
# Для Ubuntu/Debian
sudo apt update
sudo apt install sysstat
# Для CentOS/RHEL/AlmaLinux
sudo yum install sysstat
# Для Arch
sudo pacman -S sysstat
Базовое использование
# Просто посмотреть срез по CPU и дискам
iostat
# С интервалом 2 секунды, 5 раз
iostat 2 5
# Только по дискам
iostat -d 2 5
# Только по CPU
iostat -c 2 5
# Более подробная статистика (в том числе по устройствам LVM, mdadm и т.д.)
iostat -x 2 5
Рекомендую: всегда смотреть с интервалом (например, 2-5 секунд). Одного среза мало — важно видеть динамику.
Пример вывода и разбор
avg-cpu: %user %nice %system %iowait %steal %idle
3.45 0.00 1.12 0.25 0.00 95.18
Device: tps kB_read/s kB_wrtn/s
sda 8.25 120.3 300.7
nvme0n1 4.10 400.5 150.9
- CPU почти не загружен, %iowait низкий — всё ок.
- Диск sda работает на запись, nvme0n1 — больше на чтение.
Настройка автоматического мониторинга
Если хочется не просто смотреть глазами, а собирать статистику для анализа, можно:
- Писать вывод iostat в лог-файл (например, через cron или systemd timer).
- Использовать sar (тоже из sysstat) для долгосрочной статистики.
- Встраивать в свои скрипты для алертов (об этом ниже).
Реальные кейсы: как iostat спасает жизнь
Кейс 1: VPS тормозит после миграции
Симптомы: Сайт грузится медленно, CPU по top — вроде свободен.
iostat показывает: %iowait 40%, tps почти не меняется, kB_wrtn/s низкий.
Вывод: Диск на хостинге перегружен (обычно это overselling на дешевых VPS). Решение — переход на SSD VPS или выделенный сервер.
Кейс 2: Docker-контейнеры лагают под нагрузкой
Симптомы: В контейнерах приложения начинают тормозить при сборке образов или бэкапе.
iostat: %iowait прыгает до 25-30%, nvme0n1 забит на запись.
Что делать: Разнести контейнеры с интенсивным I/O на отдельные диски, вынести бэкапы на другой сервер.
Кейс 3: RAID массив — затык на rebuild
Симптомы: Во время восстановления RAID всё остальное тормозит.
iostat: tps x3 от обычного, %iowait > 50%.
Рекомендация: Планировать rebuild на ночь, ограничить скорость восстановления (mdadm –speed-limit).
Таблица: сравнение ситуаций
Симптомы | Что показывает iostat | Решение |
---|---|---|
Медленный сайт | Высокий %iowait, низкий tps | Поменять диск/перейти на SSD |
Лаги при сборке Docker | Прыгает %iowait, запись на диск | Разнести контейнеры по дискам |
CPU 100%, но %iowait низкий | Высокий %user/%system | Оптимизировать код, добавить CPU |
Частые ошибки и мифы
- Миф: %iowait — это всегда плохо.
Реальность: Иногда это нормально (например, при большом количестве фоновых задач). Главное — смотреть в динамике. - Ошибка: Сравнивать tps на SSD и HDD напрямую.
Реальность: SSD выдерживают больше операций, для них tps может быть в разы выше. - Ошибка: Смотреть только на %user.
Реальность: Если %user низкий, а система всё равно тормозит — почти всегда проблема в I/O. - Миф: iostat — только для железных серверов.
Реальность: Работает и в облаке, и в контейнерах (если есть доступ к /proc/diskstats).
Похожие утилиты и альтернативы
- glances — крутая утилита для общего мониторинга, но не даёт такой детализации по I/O.
- htop — показывает нагрузку, но не даёт срезов по дискам.
- iostat-bpfcc — для advanced-юзеров, мониторинг I/O на уровне процессов через eBPF.
- sar — для сбора долгосрочной статистики.
Интересные фишки и нестандартные применения
- Можно использовать iostat в скриптах для автоматических алертов (например, если %iowait > 20% — слать уведомление в Telegram).
- Сравнивать производительность разных дисков «вживую» (например, при тестах SSD — сразу видно разницу по tps и kB_wrtn/s).
- Использовать в CI/CD для оценки нагрузки во время сборки и деплоя (особенно важно для Docker/Podman окружений).
- Собирать статистику по LVM-томам, RAID-массивам, внешним дискам (iostat -x).
- Анализировать проблемы с виртуализацией (например, если %steal высокий — проблема на хосте, а не у тебя).
Автоматизация и интеграция с другими инструментами
iostat отлично дружит с автоматизацией:
- Можно парсить его вывод в bash-скриптах для быстрой диагностики.
- Интегрируется с системами мониторинга (Zabbix, Prometheus через node_exporter, Grafana).
- Легко строить графики на основе логов iostat для анализа трендов.
- Использовать в Ansible-плейбуках для health-check перед деплоем.
# Пример простого алерта в bash
if [ $(iostat -c 1 2 | awk '/^ / {print int($4)}' | tail -1) -gt 20 ]; then
echo "ALERT: iowait > 20%!" | mail -s "I/O Problem" [email protected]
fi
Статистика и сравнение с другими решениями
По популярности среди линуксоидов iostat входит в топ-5 инструментов для диагностики. В отличие от top или htop:
- Показывает именно I/O-проблемы (основную причину тормозов на VPS и облаках).
- Не нагружает систему (очень лёгкий, не требует демонов).
- Работает даже на минимальных инсталляциях без GUI.
Если нужно что-то fancy с графиками — ставь Grafana + Prometheus + node_exporter, но для быстрой диагностики iostat — вне конкуренции.
Выводы и рекомендации: когда и как использовать iostat
- Если сервер начал тормозить — первым делом смотри iostat. Это даст ответ, что именно не так: CPU или диск.
- Для VPS и облака — must-have, особенно если хостер не даёт подробных метрик.
- Встраивай в мониторинг и алерты — автоматизация спасёт от ночных звоночков «у нас всё лежит!».
- Периодически снимай срезы, чтобы видеть тренды и планировать апгрейды.
- Используй вместе с другими инструментами: top/htop — для процессов, iostat — для I/O, sar — для долгосрочного анализа.
Прокачай свой сервер — держи iostat под рукой! Если нужен VPS или выделенный сервер с нормальным диском и CPU, смотри тут и тут — и пусть твои сервисы летают!
Официальная документация и ресурсы:
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.