# htop - интерактивный монитор процессов _Команды · LinuxLab Knowledge Base_ **TL;DR:** htop - интерактивный TUI-монитор процессов. F-keys: F3 поиск, F4 фильтр, F5 дерево, F6 сортировка, F9 kill. Цветовые столбцы наверху, список внизу. Замена top'а везде, где доступен. ## Зачем htop вместо top `top` всегда есть, но read-only по дефолту, скучно отсортирован, не показывает дерево. `htop` цветной, интерактивный, мышью можно кликать. В современных distro обычно ставится первой командой после установки системы. Альтернативы: `btop` (красивее, графики), `glances` (включая сеть и диск), `atop` (история нагрузки на диск). Но `htop` - стандарт. ## Запуск ```bash 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 1. Найди процесс (F3 или мышь) 2. F9 - откроется меню сигналов 3. Выбери: SIGTERM (15) - вежливо, SIGKILL (9) - грубо Между TERM и KILL: SIGINT (2) равно Ctrl+C, SIGHUP (1) обычно вызывает reload без рестарта. Подробнее в [signals](/kb/signals.md). ## htop в контейнере По дефолту контейнер видит **все** процессы хоста (если не своё PID-namespace). В Docker контейнере htop покажет только свои - это норма из-за [[namespaces|PID namespace]]. Если хочешь видеть процессы хоста изнутри: ```bash 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`** - всегда есть, base - **`btop`** - красивые графики, ASCII-art, медленнее на старых CPU - **`glances`** - тоже сеть/диск/процессы в одном окне, на Python - **`atop`** - бэкграунд-демон с историей; смотри прошлый пик нагрузки ## Команды ```bash htop ``` Запуск без аргументов - все процессы текущего юзера и системные ```bash htop -u www-data ``` Только процессы конкретного юзера - удобно на shared-сервере ```bash htop -p $(pgrep -d, nginx) ``` Только nginx-PID'ы - быстрая фильтрация одной службы ```bash htop -d 50 ``` Refresh раз в 5 секунд (10x по 0.5s) - меньше CPU на самом мониторе ```bash htop --tree ``` Сразу в tree-mode - быстрее увидеть кто кого запустил ```bash htop --sort-key=PERCENT_MEM ``` Стартовать отсортированным по памяти - искать утечки ```bash killall -USR1 htop ``` Не команда htop, но обратная: послать сигнал самому htop из терминала ## См. также - [ps - снимок процессов](/kb/cmd-ps.md) - [Сигналы (SIGTERM, SIGKILL, SIGHUP)](/kb/signals.md) - [OOM killer](/kb/oom-killer.md) - [Load average](/kb/load-average.md) - [strace - какие syscall'ы делает процесс](/kb/cmd-strace.md)