Мониторинг нагрузки: установка и настройка 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).
Регистрация на 🏰 VDSina без номера телефона (через почту)
Как не попасть на деньги при посуточной оплате (баланс и блокировки)
Обзор панели управления: где что лежит
Выбор тарифа: на что влияют vCPU, RAM и SSD
Разница между VDS и обычным хостингом (на пальцах)
Как выбрать операционную систему для новичка: Ubuntu vs Debian vs AlmaLinux
Установка сервера в один клик: кнопка «Создать»
Что такое root-пароль и где его сохранить
Первый вход по SSH через командную строку Windows
Первый вход по SSH через PuTTY (простая инструкция)
Первый вход по SSH через Termius (для телефона и ПК)
Как обновить пароль root в панеле VDSina
Базовые команды Linux: ls, cd, sudo, apt update
Как проверить, сколько ресурсов жрет ваш сервер (htop, free -h)
Установка панели управления сервером (ISPmanager) за 5 минут
Установка бесплатной панели FastPanel от 🏰 VDSina (родная)
Установка панели HestiaCP (бесплатно и просто)
Настройка файрвола (UFW) чтобы не взломали в первый же час
Как открыть порты 80 и 443 для сайта
Установка LAMP (Linux, Apache, MySQL, PHP) одной командой
Установка LEMP (Nginx вместо Apache) одной командой
Как забросить сайт на WordPress через панель 🏰 VDSina (готовый шаблон)
Ручная установка WordPress на чистый сервер
Создание базы данных MySQL для сайта через командную строку
Как привязать домен к серверу (настройка A-записи)
Выпуск бесплатного SSL-сертификата от Let's Encrypt
Настройка cron (заданий по расписанию) на VDSina
Автоматическое резервное копирование (бэкапы) в панеле VDSina
Как восстановить сервер из бэкапа за 2 минуты
Настройка VPN на 🏰 VDSina (OpenVPN) для новичка
Настройка WireGuard на 🏰 VDSina (быстрее и проще)
Как проверить, не заблокирован ли ваш IP в РФ
Смена IP-адреса сервера в панеле 🏰 VDSina (если заблокировали)
Как привязать свой ISO-образ для установки Windows Server
Установка бота для Telegram на Python на VDSina
Как запустить бота в фоне (screen и systemd для чайников)
Мониторинг сервера через встроенные графики VDSina
Как не переплатить: выключение сервера при простое (посуточная оплата)
Повышение тарифа без перезагрузки сервера (горячий апгрейд)
Как настроить уведомления о падении сервера в Telegram
Безопасность: запрет входа под root через SSH
Создание нового пользователя с правами sudo
Защита от DDoS (включение защиты в панеле VDSina)
Подключение сетевых дисков (блочные устройства) для дополнительного места
Миграция сайта с другого хостинга на 🏰 VDSina (пошагово)
Как удалить сервер и не забыть отключить оплату
Где брать помощь: техподдержка VDSina, чаты и форумы
Бонус: установка игрового сервера Minecraft (для друзей)
Бесплатный курс: "VDSina для чайников: Сервер за 5 минут: Эффективно и быстро"
Бесплатный виджет обратной связи для JavaScript
Чатрулетка: новый способ общения
Что такое видеочат рулетка и зачем
Фототехника для пейзажей
Как выбрать лучший render хостинг для 3D рендеров с Eevee
Логистика с Excel: бесплатный курс учёта остатков и подбора транспорта
Онлайн генератор паролей для Windows
Онлайн Сплетница субтитры
Оптимизация обработки форм GEO проекта
Пасхалки в сериале Dexter: раскрытие тайн
Погода в Ревде вечером
Родительский портал Воронеж
Роллы, которые не требуют рекламы
SEO-принципы для нейросетевых разработчиков
Собери 10 пакетов перцев с теплицы
Создание мемов без фотошопа: простые приемы
Сравнение Arsys хостинг сервисов для блогеров с WordPress на 2023 год
VDSina для новичков: советы для начала
Весь экран под циферблат
Видеочат с минимальной задержкой
Виртуальная девушка ИИ
Вложения в компании
Введение в нейросети бесплатно