Что показывает top?

Привет, %username%! Для того, чтобы посмотреть чем именно занят ваш Linux-сервер, надо посмотреть, что же запущено в нем – какие процессы, сколько ресурсов они используют. Для этого есть замечательная утилита top, которая присутствует “из коробки”.
🔄 Обновлено 2026-08-09. Разбил на разделы, добавил что смотреть в первую очередь, полезные флаги запуска и раздел про steal time и метрики виртуалок. Сам вывод
topс 2020 года не изменился — всё ниже актуально для procps-ng на любом современном дистрибутиве.
Запустить утилиту:
# От имени root'а
sudo top
# Или просто
topСразу пара флагов, которые экономят время:
top -o %MEM # сразу отсортировать по памяти, а не по CPU
top -u postgres # только процессы конкретного пользователя
top -p 1234,5678 # следить за конкретными PID
top -H # показывать потоки, а не процессы
top -b -n 1 # разовый неинтерактивный вывод, удобно в скриптах и логахЧто показывает шапка#
Далее по порядку – что показывает данная утилита:
1-я строка —
top:- Текущее время (
22:43:39); - Аптайм, то есть время работы без перезагрузки (
up 39 days, 7:32); - Количество подключенных пользователей (3 users);
- Средняя загруженность системы (load average: 1.15, 1.11, 1.06) за 1 минуту, 5 минут и 15 минут;
- Текущее время (
2-я строка —
Tasks:- Всего запущено процессов (
628 total); - Исполняющихся сейчас процессов (
2 running); - Спящих процессов (
626 sleeping); - Остановленных процессов (
0 stopped); - Процессов, ожидающих сигнала завершения от родителя, то есть зомби (
0 zombie);
- Всего запущено процессов (
3-я строка —
%Cpu(s):- Процент иcпользования процессора пользователями (
1.1 us); - Процент иcпользования процессора системой (
0.4 sy); - Процент использования процессора приоритеными процессами “команда nice” (
0.0 ni); - Процент простаивающих мощностей (
98,5 id); - Процент ожидающих I/O операций. (
0.0 wa); - Процент использования процессора на обслуживание аппаратных прерываний Hardware IRQ (
0.0 hi); - Процент использования процессора на обслуживание программных прерываний Software Interrupts (
0.0 si); - Процент использования процессора для других задач, например, обслуживания гипервизора. Равен 0 на физической машине (
0.0 st);
- Процент иcпользования процессора пользователями (
4-я и 5-я строка —
memory usage- Общий объем памяти;
- Использованный объем памяти;
- Объём свободной памяти;
- Объем буферов в кэше;
- Далее тоже самое, но касательно swap;
Список процессов#
Оставшиеся строки – processes list, по которым показывается следующая информация:
PID– Proccess ID процесса;USER– С правами какого пользователя выполняется;PR– Приоритет процесса;NI– Значение “nice” процесса;VIRT– Виртуальная память, используемая процессом;RES– Физическая память, используемая процессом;SHR– Разделяемая память процесса;S– Состояние процесса:S- спящий;R- запущенный;Z- зомби;
%CPU– Процент использования процессора процессом;%MEM– Процент использования памяти;TIME+- Общее время активности процесса;COMMAND– Команда, которой был вызван процесс;
Данная утилита, как видно из описания предоставляет довольно подробную информацию, которой будет достаточно для диагностики. Так же эта утилита сразу есть в дистрибутиве, в отличии от “красивого” htop.
Управление с клавиатуры#
Управлять top’ом можно с помощью следующих “кнопочек”:
t- Включение и выключение вывода на экран суммарных данных;m- Включение и выключение вывода на экран информации о памяти;A- Сортировка строк по максимальному потреблению различных системных ресурсов;f- Вход в меню конфигурирования данных, выводимыхмых на экран;o- Позволяет интерактивно задавать порядок строк;r- Изменение приоритета процесса с помощью командыrenice;k- Уничтожение процесса с помощью командыkill;Y- Вывод количества используемой памяти в б, Кб, Мб, Гб и т.д. в зависимости от количества нажатий;с- подробный вывод команды запуска процесса;
Ещё несколько, которых не было в списке выше, но которые пригождаются постоянно:
1— разложить строку%Cpu(s)по ядрам. Сразу видно, упёрлось ли всё в одно ядро или нагрузка размазана;Shift+M— сортировать по памяти,Shift+P— по CPU (по умолчанию);eиShift+E— переключать единицы измерения в списке процессов и в шапке соответственно;Shift+H— переключиться на потоки вместо процессов;V— дерево процессов вместо плоского списка;W— сохранить текущую конфигурацию в~/.config/procps/toprc, чтобы не настраивать заново каждый раз.
В качестве бонуса – выглядит утилита в работе примерно так:

Что смотреть в первую очередь#
Когда сервер «тормозит», а времени разбираться нет, порядок такой.
load average против числа ядер. Само по себе значение 1.15 ни о чём не говорит. Сравнивать его надо с количеством ядер (nproc): load 4 на четырёхъядерной машине — это полная, но здоровая загрузка, а на одноядерной — очередь. Три числа показывают тренд за 1, 5 и 15 минут: если первое сильно больше третьего, нагрузка растёт прямо сейчас.
wa в строке %Cpu(s). Высокий wa означает, что процессор простаивает в ожидании диска. Тут проблема не в CPU, и дальше надо идти в iostat -x 1 и смотреть на утилизацию и latency дисков, а не искать прожорливый процесс.
Разница между VIRT и RES. Пугаться больших VIRT не надо: это адресное пространство, включая то, что никогда не будет тронуто. Реально занятая физическая память — это RES. При этом RES считает и разделяемую память (SHR), поэтому сумма RES по всем процессам почти всегда больше, чем реально занято.
Зомби. Ненулевой zombie сам по себе безвреден: зомби не потребляет ресурсов, кроме записи в таблице процессов. Но растущее их число — признак того, что родительский процесс не вызывает wait(), и это уже баг в приложении.
st — steal time и почему это важно на виртуалках#
Единственное поле, которое стоит отдельного упоминания, — st в строке %Cpu(s). Это доля времени, когда виртуальная машина хотела считать, но гипервизор отдал процессор кому-то другому.
На физической машине там всегда ноль. На виртуалке устойчивые единицы процентов означают, что хост перепродан и твоя нагрузка конкурирует с соседями. Это тот случай, когда «тормозит» не решается ничем внутри системы: ни профилированием приложения, ни тюнингом ядра. Лечится переездом на другой хост или сменой тарифа, и разговаривать об этом надо с провайдером, приложив график st.
Чем смотреть, если top мало#
top хорош тем, что есть везде. Когда его не хватает:
atop— умеет писать историю в файл, поэтому позволяет посмотреть, что происходило ночью, когда никто не смотрел;htopиbtop— интерактивнее и нагляднее, но их надо ставить;strace— когда уже понятно, какой процесс виноват, но непонятно, чем он занят;iostat -x 1,vmstat 1,pidstat— из пакетаsysstat, когда нужны цифры по дискам и памяти, а не общая картина.
Утилита — это половина дела. top показывает цифры, но не подсказывает, какую гипотезу проверять первой и когда пора её бросить. Про сам метод разбора — USE, деление пополам, таймер на гипотезу — я собрал отдельный лист в карте компетенций SRE.
Собственно, на этом всё.