Зачем htop вместо top
top всегда есть, но read-only по дефолту, скучно отсортирован, не
показывает дерево. htop цветной, интерактивный, мышью можно кликать.
В современных distro обычно ставится первой командой после установки
системы.
Альтернативы: btop (красивее, графики), glances (включая сеть и диск),
atop (история нагрузки на диск). Но htop - стандарт.
Запуск
htop # все процессы
htop -u user # только конкретного юзера
htop -p $(pgrep nginx) # только PID-ы nginx
htop -t # с tree-mode сразу
htop --filter=nginx # фильтр по имени
Что показывают столбцы наверху
По дефолту:
CPU [||||||||| 25%]
Mem [|||||||||||| 3.2G/16G]
Swp [ 0K/2G]
- Каждое ядро отдельно (можно объединить в среднее)
- Цвет CPU: зелёный=user, красный=kernel, синий=low-prio, оранжевый=iowait
- Mem: зелёный=used, синий=buffers, жёлтый=cache (cache≠потеряно!)
- Tasks: всего | running | threads
- Load average и Uptime
В F2 Setup → Meters можно добавить: Hostname, температуру (Temperature),
battery, сеть (netio), диск, ZFS ARC.
F-keys (или Esc-комбинации)
| Клавиша | Действие |
|---|---|
F1 / h | help |
| F2 | Setup - меню настроек |
F3 / / | Search by name (incremental) |
F4 / \ | Filter (постоянный) |
F5 / t | Tree mode |
| F6 | Sort by - выбрать колонку |
| F7/F8 | Renice (priority) |
F9 / k | Send signal (по дефолту SIGTERM) |
F10 / q | Quit |
H | toggle threads |
K | toggle kernel threads |
u | filter by user (выбор из списка) |
Space | mark/unmark процесс (для bulk-действий) |
c | tag children и tag |
s | strace выбранного процесса (если установлен strace) |
l | lsof - открытые файлы выбранного |
M/P/T | сортировка по Memory/CPU/Time |
+/- | развернуть/свернуть поддерево в tree mode |
Поиск (F3) - находит первое совпадение, F3 ещё раз - следующее. Фильтр (F4) скрывает всё кроме совпадений. Esc снимает.
Tree mode (F5)
Показывает иерархию родитель → ребёнок. Полезно понять, кто кого запустил:
systemd
├─ sshd
│ └─ sshd: user
│ └─ bash
│ └─ htop
├─ nginx
│ ├─ nginx: worker
│ └─ nginx: worker
└─ postgres
├─ postgres: writer
└─ postgres: checkpointer
Помогает находить какой родитель спавнит зомби-чайлды.
Полезные колонки
F2 → Columns добавь:
- CGROUP - в каком cgroup живёт процесс (видно systemd-юниты, контейнеры)
- OOM - oom_score - чем выше, тем больше шансов словить [[oom-killer|OOM-killer]]
- IO_RATE - чтение/запись (нужен root и
--enable-delayacct) - STARTTIME - когда запущен
- PROCESSOR - на каком CPU выполняется
- NLWP - число threads
Цветовые подсказки
- Жёлтое имя процесса - kernel thread
- Красное PID - в state D (uninterruptible sleep, обычно ждёт I/O)
- Помеченные пробелом - выделены, F9 убьёт всех помеченных
Как kill'ать через htop
- Найди процесс (F3 или мышь)
- F9 - откроется меню сигналов
- Выбери: SIGTERM (15) - вежливо, SIGKILL (9) - грубо
Между TERM и KILL: SIGINT (2) равно Ctrl+C, SIGHUP (1) обычно вызывает reload без рестарта. Подробнее в signals.
htop в контейнере
По дефолту контейнер видит все процессы хоста (если не своё PID-namespace). В Docker контейнере htop покажет только свои - это норма из-за [[namespaces|PID namespace]].
Если хочешь видеть процессы хоста изнутри:
docker run --pid=host -it alpine sh -c 'apk add htop && htop'
Когда что-то пошло не так
load 8но CPU молчит - I/O wait. Состояние D, процессы спят на диске. Смотриiostat -x 1или iowait-цвет в htop.- Память "почти кончилась" а свободно 200MB - смотри Available, не Free. Cache и buffers отдадутся при необходимости.
- Процесс не убивается даже SIGKILL - state D (uninterruptible). Ждёт NFS/диск/ядро. Только перезагрузка либо разлочивание устройства.
- htop сам в топе - F2 → Display → "Hide userland process threads" и "Hide kernel threads" уменьшат CPU самого htop'а.
- Не показывает container-имена - нужна колонка
CGROUP. Имя контейнера в пути/sys/fs/cgroup/.../docker-XXXXX.
Альтернативы
top- всегда есть, basebtop- красивые графики, ASCII-art, медленнее на старых CPUglances- тоже сеть/диск/процессы в одном окне, на Pythonatop- бэкграунд-демон с историей; смотри прошлый пик нагрузки