Мониторинг нагрузки: установка и настройка htop и iotop
Мониторинг нагрузки: как установить и настроить htop и iotop для контроля сервера
Вы когда-нибудь чувствовали, что ваш сервер "тормозит", но не понимали, что именно его нагружает? Или внезапно сайт переставал отвечать, а хостинг-провайдер писал: "У вас высокая нагрузка на CPU/Disk — оптимизируйте"?
Проблема в том, что стандартные инструменты Linux (например, top) показывают данные слишком скупо. Они не дают полной картины: какие конкретно процессы жрут ресурсы, кто блокирует диск, почему сервер "задыхается" при пиковых нагрузках.
В этом уроке вы научитесь:
✅ Устанавливать htop и iotop — продвинутые утилиты для мониторинга CPU, памяти и дисковой активности.
✅ Читать их вывод как открытую книгу: понимать, какие процессы опасны, а какие — норма.
✅ Быстро находить и убивать "прожорливые" задачи, чтобы сервер не упал в критический момент.
✅ Настраивать утилиты под свои нужды (цвета, сортировка, фильтры).
Это как рентген для вашего сервера — вы увидите все внутренние проблемы до того, как они приведут к простою.
1. Почему top — это прошлый век, а htop и iotop — будущее
Давайте начнем с аналогии. Представьте, что ваш сервер — это ресторан:
top— как меню без цен и описаний: вы видите список блюд (процессов), но не понимаете, какое из них съедает весь бюджет (ресурсы).htop— это детализированное меню с калорийностью, временем приготовления и отзывами. Вы сразу видите, какой процесс "жирный" и почему.iotop— это камеры на кухне, которые показывают, кто именно занимает все плиты (дисковые операции) и мешает другим блюдам (процессам) готовиться.
| Утилита | Что показывает | Почему лучше top |
|---|---|---|
htop |
CPU, память, процессы (с деревом) | Интерактивный интерфейс, цвета, сортировка, убивание процессов без kill |
iotop |
Нагрузка на диск (чтение/запись) | Видит, какой именно процесс блокирует диск (например, тяжелый SQL-запрос или бэкап) |
Вывод: Если вы администрируете сервер (особенно для арбитража или высоконагруженных сайтов), htop и iotop должны быть у вас под рукой всегда.
2. Установка htop и iotop на сервер
2.1. Установка на Debian/Ubuntu
Откройте терминал и выполните:
sudo apt update && sudo apt install htop iotop -y
2.2. Установка на CentOS/RHEL
sudo yum install epel-release -y # Подключаем репозиторий EPEL
sudo yum install htop iotop -y
2.3. Проверка установки
Запустите утилиты:
htop
iotop
Если видите цветной интерфейс — всё работает!
Внимание! Для
iotopнужны права суперпользователя (sudo). Если запускаете безsudo, увидите ошибку:iotop: error: Linux kernel >= 2.6.20 required!Решение: всегда запускайте как
sudo iotop.
3. Разбор htop: как читать и управлять процессами
3.1. Интерфейс htop: что где находится
Когда вы запускаете htop, вы видите 4 ключевые зоны:
-
Верхняя панель (системная статистика)
- CPU: Графики загрузки ядер (зеленый — пользовательские процессы, красный — системные, синий — низкоприоритетные).
- Mem: Использование оперативной памяти (желтый — кеш, зеленый — буферы).
- Swp: Использование swap (если это значение растет — серверу не хватает RAM!).
-
Список процессов
- PID: Идентификатор процесса.
- USER: Пользователь, от имени которого запущен процесс.
- PRI: Приоритет (чем меньше число, тем выше приоритет).
- NI: "Nice value" (от -20 до 19; чем ниже, тем выше приоритет).
- VIRT: Виртуальная память, которую процесс занимает.
- RES: Реальное использование RAM.
- CPU% и MEM%: Процент загрузки CPU и памяти.
- TIME+: Время работы процесса.
- Command: Команда, которой процесс был запущен.
-
Нижняя панель (горячие клавиши)
F1— помощь.F2— настройка (о ней поговорим позже).F3— поиск процесса.F4— фильтр процессов.F5— дерево процессов (показывает иерархию).F6— сортировка (по CPU, памяти и т.д.).F9— убить процесс (kill).F10— выход.
3.2. Практические примеры: что делать, если сервер тормозит
Сценарий 1: Высокая нагрузка на CPU
- Запустите
htop. - Нажмите
F6→ выберите сортировку поCPU%. - Сверху окажутся процессы, которые больше всего грузят процессор.
- Если видите незнакомый процесс (например,
minerdилиkworker), это может быть майнинг-бот или DDOS-атака. - Выделите процесс стрелками →
F9→ выберите сигнал (SIGTERMилиSIGKILL).
Важно! Не убивайте процессы наугад. Например,
nginxилиmysql— критичные для работы сайта. Сначала проверьте, почему они грузят CPU (возможно, это норма при высокой посещаемости).
Сценарий 2: Не хватает памяти (OOM Killer активируется)
Если в верхней панели Mem заполнен на 100% и растет Swp:
- Отсортируйте процессы по
MEM%. - Найдите те, что жрут больше всего RAM (например,
php-fpmилиnode). - Проверьте, не утечка ли это памяти (если процесс со временем только растет).
- Решения:
- Перезапустите процесс (
systemctl restart php-fpm). - Увеличьте память сервера.
- Оптимизируйте код (например, уменьшите лимиты памяти в PHP).
- Перезапустите процесс (
Сценарий 3: Подозрительные процессы (взлом?)
Если видите незнакомые процессы (например, /tmp/.x/miner):
- Загуглите название процесса.
- Проверьте, от какого пользователя он запущен (
USER). - Убейте процесс (
F9), затем проверьте сервер на вирусы (rkhunter,chkrootkit).
4. Разбор iotop: кто блокирует ваш диск?
iotop показывает, какие процессы активно читают/пишут на диск. Это критично для:
- Серверов с SSD (у них ограничен ресурс записей).
- Баз данных (например, MySQL может "зависнуть" из-за тяжелых запросов).
- Арбитражных серверов (если скрипты постоянно пишут логи).
4.1. Как читать вывод iotop
Запустите:
sudo iotop -o # Флаг `-o` показывает только активные процессы
| Столбец | Что означает |
|---|---|
| TID | ID потока (thread). |
| PRIO | Приоритет ввода-вывода. |
| USER | Пользователь. |
| DISK READ | Скорость чтения с диска (Kb/s). |
| DISK WRITE | Скорость записи на диск (Kb/s). |
| SWAPIN | Использование swap (если не 0 — плохо!). |
| IO% | Процент загрузки диска процессом. |
| COMMAND | Команда процесса. |
4.2. Типичные проблемы и решения
Проблема 1: Процесс постоянно пишет на диск (например, mysqld)
- Причина: Тяжелые SQL-запросы, отсутствие индексов, большие транзакции.
- Решение:
- Проверьте медленные запросы в MySQL (
SHOW FULL PROCESSLIST;). - Оптимизируйте базу (добавьте индексы, разбейте большие таблицы).
- Проверьте медленные запросы в MySQL (
Проблема 2: updatedb или locate грузят диск
- Причина: Система обновляет базу данных для команды
locate(ищет файлы). - Решение:
- Отключите автоматическое обновление:
sudo systemctl disable mlocate. - Или перенесите задачу на ночное время (
cron).
- Отключите автоматическое обновление:
Проблема 3: Неизвестный процесс пишет в /tmp
- Причина: Возможно, это вредоносное ПО (например, ботнет).
- Решение:
- Убейте процесс (
kill -9 PID). - Проверьте
/tmpна подозрительные файлы (ls -la /tmp).
- Убейте процесс (
Проблема 4: Высокая нагрузка от flush (MySQL)
- Причина: MySQL сбрасывает данные на диск (например, при большом количестве изменений).
- Решение:
- Увеличьте
innodb_buffer_pool_sizeвmy.cnf. - Настройте
innodb_flush_log_at_trx_commit=2(но это снизит надежность).
- Увеличьте
5. Настройка htop под себя
htop позволяет кастомизировать отображение. Запустите настройку:
htop → F2 (Setup)
5.1. Полезные настройки
| Опция | Зачем нужна | Рекомендация |
|---|---|---|
| Цвета | Выделение важных процессов. | Красный — высокий CPU, желтый — высокая память. |
| Столбцы | Добавление/удаление информации. | Добавьте IO_RATE (ввод-вывод). |
| Порядок сортировки | Быстрый доступ к критичным процессам. | По умолчанию — по CPU%. |
| Дерево процессов | Видеть иерархию (родитель → дочерние). | Включите в Display options. |
5.2. Сохранение настроек
После изменений нажмите F10 → выберите "Save setup to ~/.config/htop/htoprc".
6. Автоматизация мониторинга: логирование и оповещения
Чтобы не сидеть постоянно в терминале, настройте автоматическое логирование и оповещения.
6.1. Логирование htop в файл
htop --delay=10 > htop_log.txt # Записывает данные каждые 10 секунд
Чтобы остановить — Ctrl+C.
6.2. Оповещения при высокой нагрузке
Используйте cron + скрипт на Bash. Пример скрипта (/usr/local/bin/check_load.sh):
#!/bin/bash
THRESHOLD=90 # Порог загрузки CPU (%)
LOAD=$(uptime | awk -F'load average: ' '{print $2}' | awk '{print $1}' | cut -d. -f1)
if [ "$LOAD" -gt "$THRESHOLD" ]; then
echo "High CPU load: $LOAD%" | mail -s "ALERT: High CPU on $(hostname)" admin@example.com
fi
Сделайте скрипт исполняемым:
chmod +x /usr/local/bin/check_load.sh
Добавьте в cron (каждые 5 минут):
crontab -e
Добавьте строку:
*/5 * * * * /usr/local/bin/check_load.sh
Практика для закрепления
Упражнение 1: Анализ текущей нагрузки
- Запустите
htop. - Отсортируйте процессы по:
- Загрузке CPU (
F6→PERCENT_CPU). - Использованию памяти (
F6→PERCENT_MEM).
- Загрузке CPU (
- Найдите топ-3 процессов по каждому критерию. Это нормальные процессы или что-то подозрительное?
Упражнение 2: Поиск дисковой активности
- Запустите
sudo iotop -o. - Посмотрите, какие процессы активно пишут/читают с диска.
- Если есть процесс с высоким
DISK WRITE(например,mysqld), проверьте, не является ли это проблемой (например, отсутствием индексов в базе).
Упражнение 3: Настройка htop
- Запустите
htop→F2. - Добавьте столбец
IO_RATE(ввод-вывод). - Измените цвет процесса с высоким CPU на красный.
- Сохраните настройки.
Упражнение 4: Убийство процесса
- Запустите в другом терминале тяжелую команду (например,
stress --cpu 2). - В
htopнайдите этот процесс. - Убейте его (
F9→SIGTERM). - Проверьте, исчез ли он из списка.
Упражнение 5: Автоматизация
- Создайте скрипт, который проверяет загрузку CPU и отправляет email, если она превышает 80% (как в разделе 6.2).
- Настройте его выполнение через
cronкаждые 10 минут.
Итоги урока
htop— ваш главный инструмент для мониторинга CPU и памяти. Умейте читать его вывод и убивать проблемные процессы.iotop— показывает, кто грузит диск. Особенно полезен для баз данных и серверов с SSD.- Настройка под себя экономит время: цвета, сортировка, логирование.
- Автоматизация спасает от простоя: настройте оповещения, чтобы узнавать о проблемах до того, как сервер ляжет.
Домашнее задание:
- Установите
htopиiotopна свой сервер. - Проанализируйте текущую нагрузку (есть ли аномалии?).
- Настройте
htopпод себя (цвета, столбцы). - Создайте скрипт для мониторинга CPU и добавьте его в
cron.
Если остались вопросы — задавайте! В следующем уроке разберем, как настроить автоматическое убивание процессов при превышении лимитов (с помощью systemd и cgroups).
Генератор паролей с длинной 64 символа
Женская одежда с бахромой
Кадастровые работы в Бийске
Как Aptum хостинг помогает малым бизнесам в управлении CRM-системами
Как выбрать планировку сайта для блогов на DreamHost
Как выбрать Vdsina вечный хостинг для своего проекта
Казань окна VEKA - профессионализм и опыт
Курьерская вода
Новостройки Оренбурга: недвижимость с отличной ценой
Онлайн чат-партнерство
Пиломатериалы для возведения бани
Почему VDSina — лучший выбор хостинга
Секреты Вконтакте: тонкости и хитрости
Скидки до 50% на тур в Коста-Рике
Видеочат рулетка бесплатно