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 — реального времени) |
NI | nice: от -20 (высокий приоритет) до 19 (низкий) |
VIRT | вся виртуальная память, включая не загруженное (KiB) |
RES | реально занятая физическая память (KiB) — главное число |
SHR | часть RES, общая с другими процессами (библиотеки) |
S | состояние: R выполняется, S спит, D ждёт диск (непрерываемо), T остановлен, t под отладчиком, Z зомби, I простаивающий поток ядра |
%CPU | загрузка CPU за последний интервал; на нескольких ядрах может быть больше 100 |
%MEM | RES в процентах от всей памяти |
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