Мониторинг ресурсов
top и htop дают реальные данные по CPU и памяти на процесс. Средняя нагрузка показывает, сколько процессов конкурируют за CPU, усреднённых за 1, 5 и 15 минут. free показывает использование RAM и swap в одну строку. Вместе эти три инструмента отвечают: машина сейчас здорова?
Сервер, работающий на 100% CPU 30 секунд, может быть в порядке — короткий пакетный job. Тот же сервер на 100% 30 минут — кризис. Средняя нагрузка за 15 минут выше числа ядер означает очередь ожидающих процессов. Память на 95% при нулевом использовании swap — скорее всего нормально; память на 95% с активным swap — главный признак надвигающегося OOM kill. Правильно читать эти числа — не просто видеть их — вот разница между спокойным дежурством и паникой в 3 ночи.
После этого урока ты сможешь интерпретировать вывод top и htop для CPU и памяти по процессу, читать среднюю нагрузку и объяснять, что означают числа выше числа ядер, использовать free -h для оценки давления памяти и swap, и использовать uptime для быстрой проверки здоровья системы.
top — классический монитор процессов в реальном времени. Обновляется каждые 3 секунды (настраивается). Заголовок показывает общесистемную статистику; таблица процессов ниже по умолчанию отсортирована по %CPU.
top - 10:42:17 up 2 days, 14:03, 2 users, load average: 1.23, 0.87, 0.64
Tasks: 182 total, 2 running, 180 sleeping, 0 stopped, 0 zombie
%Cpu(s): 8.3 us, 1.2 sy, 0.0 ni, 89.1 id, 1.0 wa, 0.0 hi, 0.4 si
MiB Mem : 7822.4 total, 412.1 free, 5631.3 used, 1779.0 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 1823.1 avail MemКлючевые поля CPU в строке %Cpu:
- us — время CPU в пространстве пользователя (код твоего приложения)
- sy — время CPU ядра/системы (системные вызовы, обработка I/O)
- id — процент простоя (100 - id = общая утилизация)
- wa — ожидание I/O — CPU простаивает в ожидании диска или сети; высокий wa = узкое место I/O, а не CPU
Интерактивные команды внутри top: q выйти, k убить (запрашивает PID + сигнал), M сортировать по памяти, P по CPU, 1 переключить вид по ядрам.
Средняя нагрузка: три числа, одна концепция. Три значения из uptime или заголовка top — среднее количество процессов в очереди выполнения (выполняющихся или ожидающих CPU) за последние 1, 5 и 15 минут.
uptime
# 10:42:17 up 2 days, load average: 1.23, 0.87, 0.64Правило большого пальца: сравни нагрузку с числом CPU (nproc или /proc/cpuinfo). На 4-ядерной машине:
- Нагрузка 2.0 → в среднем 50% мощности CPU. Нормально.
- Нагрузка 4.0 → 100% утилизации. Каждый новый job ждёт.
- Нагрузка 8.0 → 200% — в среднем очередь из 4 процессов. Что-то не так.
Тренд важнее мгновенного снимка. Нагрузка 6.0, 3.0, 1.5 снижается — всплеск только что закончился. Нагрузка 1.5, 3.0, 6.0 растёт — расследуй сейчас. Нагрузка включает процессы в состоянии непрерываемого ожидания I/O (состояние D), поэтому очень высокая нагрузка при низком %CPU обычно означает узкое место I/O.
free -h показывает RAM и swap в удобочитаемых единицах.
free -h
# total used free shared buff/cache available
# Mem: 7.6G 5.5G 402M 312M 1.7G 1.8G
# Swap: 2.0G 0B 2.0GВажный столбец — available, а не free. Linux агрессивно использует свободную RAM как кэш страниц (buff/cache). Эта память мгновенно освобождается при необходимости — она не «занята» в каком-либо значимом смысле. available = free + освобождаемый кэш = что реально может получить новый процесс.
Swap: swap used > 0 означает, что ядро начало вытеснять холодные страницы на диск. Небольшое количество нормально. Активное использование swap (следи за столбцами si/so в vmstat 1) вызывает видимые задержки. Полностью занятый swap с активностью — последнее предупреждение перед началом OOM kills.
free -h # удобочитаемые единицы
free -s 2 # обновление каждые 2 секунды
vmstat 1 # вид по секундам: si/so = страницы swap in/outhtop — более удобный top с поддержкой мыши и цветом. Не установлен по умолчанию, но доступен в менеджерах пакетов всех основных дистрибутивов.
sudo apt install htop # Debian/Ubuntu
sudo dnf install htop # RHEL/Fedora
htopКлючевые преимущества перед top:
- Цветные полосы CPU на каждое ядро (сразу видно, если одно ядро перегружено, а остальные простаивают)
- Прокручиваемый список процессов — без обрезки
F6для интерактивной сортировки по любому столбцуF9для отправки сигнала через меню (не нужно вводить номер)F5вид дерева — показывает отношения родитель-потомок встроенно- Фильтр по имени пользователя или процесса с
\
Для повседневного мониторинга на серверах, где контролируешь среду, установи htop. Для диагностики на незнакомых машинах top всегда доступен.
Быстрые однострочники проверки здоровья. При подключении к машине по SSH для 10-секундного триажа:
uptime # тренд средней нагрузки
free -h # память и swap
ps aux --sort=-%cpu | head # топ потребителей CPU
ps aux --sort=-%mem | head # топ потребителей памяти
df -h # использование диска (часто забывают, пока не заполнится)Объедини в переиспользуемый алиас:
alias health='uptime && free -h && df -h'Для устойчивого мониторинга перенаправь top -b -n 5 (пакетный режим, 5 итераций) в файл для снимка с временной меткой, который можно отправить или сравнить.
Диагностировать медленный сервер менее чем за 2 минуты.
# 1. Высокая ли нагрузка? Растёт или падает?
uptime
# load average: 7.81, 4.32, 2.11 ← растёт на 4-ядерной машине. Плохо.
# 2. Ограничен ли CPU или I/O?
top -bn1 | head -5
# %Cpu: 12.3 us, 3.1 sy, 0.0 ni, 21.4 id, 62.8 wa
# 62.8% wa → ожидание I/O. Не CPU.
# 3. Какой процесс выполняет I/O?
ps aux --sort=-%cpu | head -5
# CPU низкий... но нагрузка высокая из-за процессов в состоянии D.
# 4. Найти процессы в состоянии D
ps aux | awk '$8 ~ /^D/ {print}'
# postgres 4219 0.1 2.3 ... D ... postgres: checkpointer
# Дисковый I/O от checkpointer postgres блокирует очередь выполнения.
# 5. Проверить диск
df -h /var/lib/postgresql
# 97% заполнен — операции записи зависают, потому что файловая система почти полна.Первопричина: диск почти полон → записи зависают → checkpointer postgres блокируется в состоянии D → средняя нагрузка растёт, хотя %CPU низкий. Исправление: освободить место на диске.
▸Почему это работает
На macOS вывод top значительно отличается — столбцы имеют другие названия и порядок. htop доступен через Homebrew. Средняя нагрузка на macOS включает спящие процессы, не конкурирующие за CPU, что может делать числа выше, чем эквиваленты Linux. Команда free на macOS отсутствует; используй vm_stat или Activity Monitor. Для продакшн Linux-систем инструменты из этого урока работают одинаково во всех основных дистрибутивах.
▸Частая ошибка
Использовать столбец free из вывода free для оценки давления памяти — самое распространённое неправильное прочтение. На здоровой Linux-системе свободная RAM почти нулевая, потому что ядро заполняет свободную память кэшем страниц. «Мало free» при высоком available — нормально. «Мало available» при активном swap (si/so > 0 в vmstat) — настоящий сигнал тревоги. Никогда не поднимай тревогу только из-за низкой свободной памяти.
4-ядерный сервер показывает load average: 6.5, 5.2, 3.1 и top показывает %Cpu: 15us, 5sy, 78id, 2wa. Что является наиболее вероятным объяснением?
top обновляет системную статистику и статистику по процессам в реальном времени; сортировка по памяти — M, вид по ядрам — 1. Средняя нагрузка (из uptime или заголовка top) считает среднюю глубину очереди выполнения за 1/5/15 минут — сравнивай с nproc; растущая нагрузка выше числа ядер требует расследования. free -h: следи за столбцом available, а не free; активный swap (vmstat si/so > 0) — настоящий сигнал давления. htop добавляет цвет, мышь и вид дерева — устанавли на серверах, которые контролируешь. Для быстрого триажа: uptime, free -h, ps aux --sort=-%cpu | head.
Практика
Начни сверху. Задачи идут от простого к сложному: вспомнить факт, применить к случаю, затем senior-уровень. Открой, попробуй, потом открой ответ.
Что-то непонятно?
Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.