← Весь справочник

top

Процессы и нагрузка в реальном времени — клавиши, пакетный режим -b -n, столбцы, load average

top показывает сводку по системе (время работы, load average, CPU, память) и список процессов, который обновляется раз в 3 секунды. По умолчанию процессы отсортированы по загрузке CPU — это первое, что смотрят, когда «сервер тормозит». В пакетном режиме (-b) top печатает снимки в stdout, и его вывод можно сохранить или разобрать в скрипте.

Синтаксис

top [опции]
top -b -n 1            # один снимок без интерактива

Опции командной строки

ОпцияЧто делает
-bпакетный режим: без управления клавишами, вывод в stdout
-n числосколько обновлений сделать и выйти
-d секундыинтервал обновления, можно дробный: -d 0.5
-p PID[,PID…]только эти процессы (до 20)
-u пользовательтолько процессы пользователя (по эффективному UID); -U — по любому из UID
-o полесортировать по полю: %CPU, %MEM, RES, TIME+, PID; -o -PID / +PID — по возрастанию / по убыванию
-cпоказывать полную командную строку вместо имени
-Hпоказывать потоки, а не процессы
-1отдельная строка для каждого ядра CPU
-E k|m|gединицы памяти в сводке; -e k|m|g — в списке процессов
-w числоширина вывода в пакетном режиме (иначе строки обрезаются)
-iскрыть процессы, которые ничего не делают
-sбезопасный режим: без k и r
-Oсписок всех имён полей для -o

Клавиши в интерактивном режиме

КлавишаЧто делает
qвыход
h или ?справка
P / M / T / Nсортировать по CPU / памяти / времени CPU / PID
< / >сдвинуть столбец сортировки влево / вправо
Rобратный порядок сортировки
kпослать сигнал процессу: спросит PID и сигнал (по умолчанию 15 SIGTERM)
rизменить nice процесса (renice)
uпоказать только процессы пользователя (пусто — всех)
o / Oфильтр: COMMAND=nginx, %CPU>5.0; = — сбросить фильтры
L / &найти строку / следующее совпадение
cполная командная строка вкл/выкл
1загрузка по каждому ядру вкл/выкл
Hпотоки вкл/выкл
Vдерево процессов (родитель → дети)
iскрыть бездействующие процессы
d или sизменить интервал обновления
E / eсменить единицы памяти в сводке / в списке
fвыбрать и упорядочить столбцы
x / yподсветить столбец сортировки / работающие процессы
l / t / mскрыть/показать строку load average / CPU / памяти
Wсохранить текущие настройки в ~/.config/procps/toprc
пробелобновить сейчас

Как читать сводку

top - 15:29:20 up 19:38,  1 user,  load average: 5.28, 6.35, 5.84
Tasks: 104 total,   1 running, 103 sleeping,   0 stopped,   0 zombie
%Cpu(s): 12.0 us,  9.6 sy,  0.0 ni, 73.5 id,  1.2 wa,  0.0 hi,  3.6 si,  0.0 st
MiB Mem :   3918.8 total,    640.2 free,   2259.3 used,   1237.6 buff/cache
MiB Swap:   4096.0 total,   2968.7 free,   1127.3 used.   1659.5 avail Mem
ПолеСмысл
up 19:38сколько система работает
load averageсредняя длина очереди на CPU за 1, 5 и 15 минут: процессы, которые выполняются или ждут CPU, плюс ждущие диска (состояние D)
us / syвремя CPU на пользовательский код / на ядро
niна процессы с повышенным nice (низкий приоритет)
idпростой
waожидание ввода-вывода — высокое значение = упираемся в диск
hi / siобработка аппаратных / программных прерываний
stвремя, «украденное» гипервизором у виртуальной машины
free / used / buff/cacheсвободно / занято / кеш файлов (освобождается по требованию)
avail Memсколько памяти реально доступно новым программам — смотри на это, а не на free

Load average сравнивают с числом ядер (nproc): на 4 ядрах 4.00 — полная загрузка, 8.00 — очередь вдвое больше, чем ядер. Растущая первая цифра — нагрузка растёт, падающая — спадает.

Столбцы процессов

СтолбецСмысл
PID / USERномер процесса / эффективный пользователь
PRприоритет планировщика (20 + NI для обычных; rt — реального времени)
NInice: от -20 (высокий приоритет) до 19 (низкий)
VIRTвся виртуальная память, включая не загруженное (KiB)
RESреально занятая физическая память (KiB) — главное число
SHRчасть RES, общая с другими процессами (библиотеки)
Sсостояние: R выполняется, S спит, D ждёт диск (непрерываемо), T остановлен, t под отладчиком, Z зомби, I простаивающий поток ядра
%CPUзагрузка CPU за последний интервал; на нескольких ядрах может быть больше 100
%MEMRES в процентах от всей памяти
TIME+суммарное время CPU с сотыми долями
COMMANDимя программы (c — полная команда)

Примеры

# снимок в файл: первые 20 строк
top -b -n 1 | head -20 > snapshot.txt

# топ-5 по памяти
top -b -n 1 -o %MEM | sed -n '8,12p'

# следить за конкретными процессами
sleep 300 &
top -p "$!"
top -b -n 3 -d 1 -p "$(pgrep -d, sleep)"

# процессы одного пользователя с полными командами, шире экрана
top -b -n 1 -u www-data -c -w 200

# записывать нагрузку каждые 5 секунд в течение минуты
top -b -d 5 -n 12 | grep '^top -' >> load.log

# только load average — без top
cat /proc/loadavg
uptime

Подводные камни

  • Первый снимок top -b -n 1 неточен для %CPU: процентам не с чем сравнивать. Для честных цифр делай два обновления и бери последнее: top -b -n 2 -d 1.
  • free маленький — это нормально. Linux занимает свободную память под кеш файлов. Нехватку памяти показывает маленький avail Mem и растущий used в swap.
  • VIRT не потребление памяти. Это всё адресное пространство, включая зарезервированное и не тронутое. Смотри на RES.
  • Load average — не проценты CPU. Процессы в состоянии D (ждут диск или NFS) увеличивают load, даже если CPU простаивает. Высокий load при большом id и большом wa — проблема с диском.
  • В контейнере top показывает load average, CPU и память всего хоста, а процессы — только свои. Лимиты контейнера там не видны.
  • Без -w строки в пакетном режиме обрезаются по ширине терминала (или 80 символов), длинные команды теряются.
  • -p принимает список через запятую, а не через пробел: pgrep -d, имя даёт нужный формат.

См. также

ps · kill · nice · pgrep · proc · system-info