htop: top dla ludzi
Po tej lekcji: kursant instaluje htop na Ubuntu i RHEL, czyta jego paski i nagłówek, używa drzewa, filtra, wyszukiwania i sortowania, zabija i zmienia priorytet procesów F-klawiszami, konfiguruje widok, i wie, czym są btop i glances.
Wstęp
obok siebie surowy top i kolorowy htop z paskami
Wczoraj był top. Działa wszędzie, wszystko pokazuje, ale wygląda jak rozkład jazdy PKP z 1995 roku. Żeby zabić proces, musisz przepisać jego numer. Żeby zobaczyć drzewo, musisz pamiętać wielkie V.
A teraz to samo, tylko że strzałkami wybierasz proces, F9 i po sprawie. Paski pokazują obciążenie każdego rdzenia. Drzewo jednym klawiszem. Filtr, który działa w trakcie pisania. To jest htop. Pierwsza rzecz, którą wielu adminów instaluje na świeżym serwerze, zaraz po tym, jak przeklnie, że jeszcze go nie ma.
Instalacja
Pamiętasz, że menadżer pakietów to hurtownia z kurierem? Na Ubuntu htop jest w hurtowni od ręki:
sudo apt install htop
htop --versionhtop 3.3.0Na RHEL jest problem. Red Hat do swoich repozytoriów htop nie dorzuca. Trzeba włączyć EPEL, czyli dodatkowe repozytorium z pakietami budowanymi przez społeczność Fedory. Hurtownia z sąsiedniej ulicy. Dobrze zaopatrzona, ale Red Hat nie daje na nią gwarancji ani wsparcia.
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-10.noarch.rpm
sudo dnf install htopNa Rocky i Alma jest prościej, bo epel-release jest w ich standardowych repozytoriach:
sudo dnf install epel-release
sudo dnf install htopZ wiedzą o pakietach i repozytoriach nie przejmuj się na razie. Cały moduł o tym przed nami. Dziś wystarczy, że wiesz, którą komendę wkleić.
Nagłówek: paski i liczniki
htop 0[||||||||||||||||||||||||||||||||| 66.4%] Tasks: 54, 49 thr, 63 kthr; 2 running
1[||||||||||||||||||||||||||||||||||||||||||98.7%] Load average: 6.16 3.06 1.23
Mem[||||||||||||||||||| 828M/7.84G] Uptime: 00:12:17
Swp[ 0K/0K]Po lewej są paski. 0 i 1 to rdzenie. Mam dwa, więc dwa paski. Na serwerze z 64 rdzeniami będzie ich 64 i wygląda to jak equalizer w wieży stereo.
Pasek nie jest jednokolorowy. Kolory mają znaczenie, a legendę masz pod klawiszem F1:
CPU usage bar: [low/normal/kernel/guest used%]
Memory bar: [used/shared/compressed/buffers/cache used/total]W domyślnym schemacie kolorów:
- procesor: niebieski to procesy o niskim priorytecie, zielony zwykłe programy, czerwony jądro, turkusowy maszyny goście. Czyli to samo co
ni,usisywtop, tylko kolorkami. - pamięć: zielony to pamięć naprawdę używana przez programy, niebieski bufory, żółty cache. Dużo żółtego to nie problem. Pamiętasz stół z tacami z poprzedniej lekcji? Sprzątaczka zabierze.
Po prawej liczniki:
Tasks: 54, 49 thr, 63 kthr; 2 running— 54 procesy, 49 wątków programów, 63 wątki jądra i ile z tego teraz biegnie.Load average— te same trzy liczby co wtop. Porównujesz z liczbą pasków rdzeni. Tu dwa rdzenie i load 6, czyli kolejka w Biedronce.Uptime— jak długo maszyna działa.
Lista procesów
PID USER PRI NI VIRT RES SHR S CPU%-MEM% TIME+ Command
26359 root 20 0 2740 1776 1644 S 0.0 0.0 0:00.00 sleep 7001
26360 root 20 0 2740 1772 1644 S 0.0 0.0 0:00.00 sleep 7002Te same kolumny co w top, z dwiema różnicami. Priorytet nazywa się PRI. A pamięć htop pisze po ludzku: 5536M, 547M, zamiast liczyć w kilobajtach.
I pierwsza rzecz, która zaskakuje: niektóre programy widać na liście kilka razy, z tym samym RES. To nie klony. To wątki. htop domyślnie pokazuje wątki programów jako osobne linijki. Kucharz z czterema parami rąk pojawia się cztery razy. Klawisz H je chowa, K chowa wątki jądra.
Myszka i strzałki
Tu jest największa różnica. W htop możesz się poruszać strzałkami i klikać myszką, nawet przez SSH. Klikasz w nagłówek kolumny, sortuje się po niej. Klikasz w proces, podświetla się. Wszystkie akcje działają na podświetlonym procesie. Żadnego przepisywania PID-ów z kartki.
A na dole ekranu masz ściągawkę: pasek z F-klawiszami. Ten pasek to najlepszy pomysł w historii programów terminalowych. Nie musisz niczego pamiętać.
F-klawisze po kolei
F1alboh— pomoc, razem z legendą kolorów.F2alboS— ustawienia. O nich za chwilę.F3albo/— szukaj. Piszesz kawałek nazwy, podświetlenie skacze do pasującego procesu. KolejneF3skacze do następnego.F4albo\— filtr. To co innego niż szukanie: filtr ukrywa wszystko, co nie pasuje. Wielkość liter nie ma znaczenia, a kilka słów oddzielasz kreską, na przykładnginx|php. Wyłączasz, otwierając filtr jeszcze raz i naciskającEsc.F5albot— drzewo. Jakpstree, tylko na żywo i z kolumnami.F6— wybór kolumny do sortowania. Albo krócej, jak wtop:Pprocesor,Mpamięć,Tczas.Iodwraca kolejność.F7iF8— zmiana priorytetu.F8obniża priorytet, czyli podnosi nice.F7podnosi priorytet i wolno to tylko rootowi.F9albok— wyślij sygnał. O tym za chwilę.F10alboq— wyjście.
Filtr i drzewo razem wyglądają tak. Filtr sleep 700, potem F5:
PID+USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
26346 root 20 0 5092 3748 3292 S 0.0 0.0 0:00.00 | | `- bash
26359 root 20 0 2740 1776 1644 S 0.0 0.0 0:00.00 | `- sleep 7001
26360 root 20 0 2740 1772 1644 S 0.0 0.0 0:00.00 | `- sleep 7002W drzewie zostają też rodzice pasujących procesów, żebyś wiedział, kto je zatrudnił. Bardzo przydatne, kiedy szukasz, który skrypt namłodził sto kopii czegoś.
Przydatne drobiazgi bez F-klawiszy:
u— pokaż procesy jednego użytkownika.Spacja— zaznacz proces. Możesz zaznaczyć kilka i zabić wszystkie naraz.czaznacza proces razem z jego dziećmi,Uodznacza wszystko.p— pełne ścieżki do programów.F— śledź proces. Podświetlenie trzyma się go, nawet kiedy przeskakuje na liście przy sortowaniu.l— otwarte pliki procesu, jeśli masz zainstalowanylsof.s— podgląd wywołań systemowych, jeśli maszstrace.- Cyfry — wpisujesz PID, podświetlenie do niego skacze.
Zabijanie strzałkami
Podświetlasz proces, naciskasz F9. Po lewej pojawia się lista sygnałów:
Send signal:
0 Cancel
1 SIGHUP
2 SIGINT
3 SIGQUIT
...
9 SIGKILL
...
15 SIGTERMDomyślnie podświetlony jest 15 SIGTERM. Enter i proces dostaje grzeczną prośbę o zamknięcie. Pamiętasz analogię? SIGTERM to grzeczna prośba o zamknięcie lokalu, SIGKILL to wyłączenie prądu. Zawsze zaczynasz od prośby. Cały następna lekcja jest o tym, czemu.
Uwaga: htop uruchomiony jako zwykły użytkownik zabije tylko Twoje procesy. Cudze, na przykład roota, odmówią. To dobrze. Strażnik nie wpuści Cię do cudzego pokoju z siekierą.
Konfiguracja: F2
F2 otwiera ustawienia. Po lewej kategorie:
- Meters — co ma być w nagłówku i gdzie. Możesz dodać na przykład zegar, nazwę komputera albo osobny pasek każdego rdzenia w dwóch kolumnach, kiedy rdzeni jest dużo.
- Display options — widok drzewa na start, ukrywanie wątków jądra i programów, podświetlanie nazwy programu w komendzie.
- Colors — schemat kolorów. Jest nawet czarno-biały, na terminal z lat dziewięćdziesiątych.
- Screens — kolumny. Możesz dodać na przykład
IO_READ_RATEiIO_WRITE_RATE, żeby widzieć, kto mieli dyskiem.
Ustawienia zapisują się same przy normalnym wyjściu do pliku ~/.config/htop/htoprc. Plik jest nadpisywany przy każdym wyjściu, więc ręcznie go nie edytujesz, bo i tak przepadnie. Konfigurujesz przez F2 i już.
To samo z linii komend:
htop -u eryk
htop -p 1234,5678
htop -t
htop -F nginx
htop -d 20Tylko procesy użytkownika eryk, tylko wskazane PID-y, od razu drzewo, od razu filtr, odświeżanie co dwie sekundy. Uwaga na -d: liczba jest w dziesiątych częściach sekundy, więc 20 to dwie sekundy, nie dwadzieścia. Klasyczna pułapka dla osób, które przyszły z top, gdzie -d jest w sekundach.
btop i glances w skrócie
Skoro htop to top dla ludzi, to btop jest dla ludzi, którzy oglądają kokpity samolotów na YouTube. Wykresy procesora, pamięci, dysków i sieci, wszystko w kolorach, wszystko się rusza. Świetny na własny laptop albo serwer domowy.
sudo apt install btop
btop --versionbtop version: 1.3.0[RHEL] btop jest w EPEL, więc po włączeniu EPEL wystarczy sudo dnf install btop.
glances idzie w inną stronę: jeden ekran ze wszystkim naraz, procesy, sieć, dyski, czujniki, plus ostrzeżenia na kolorowo, kiedy coś przekracza normy. Umie też wypisywać dane dla skryptów i działać jako mały serwer WWW z podglądem w przeglądarce.
sudo apt install glances
glances
glances --stdout cpu.total,mem.percent,loadcpu.total: 59.1
mem.percent: 18.7
load: {'min1': 0.81298828125, 'min5': 1.3251953125, 'min15': 1.23583984375, 'cpucore': 2}[RHEL] Z glances na RHEL 10 bywa różnie. Sprawdź dnf search glances po włączeniu EPEL. Jeśli go nie ma, instaluje się go jako program w Pythonie, na przykład przez pipx install glances.
Uczciwie: na serwerach produkcyjnych najczęściej spotkasz top i htop. Reszta to dodatki, ładne, ale nie zawsze obecne. Fundament to rozumienie liczb. Jeśli rozumiesz load average, wa, RES i stany procesów, to każdy z tych programów przeczytasz w minutę.
Jak to działa pod spodem
htop robi to samo co top i ps: co chwilę czyta /proc. Każdy proces to folder /proc/PID, każdy wątek to folder /proc/PID/task/TID, pasek procesora to różnica liczb z /proc/stat między dwoma odczytami, pasek pamięci to /proc/meminfo.
A zabijanie? F9 robi dokładnie to samo co komenda kill: prosi jądro o dostarczenie sygnału do procesu o danym numerze. Zmiana priorytetu przez F7 i F8 to to samo, co komenda renice. htop to tylko ładna nakładka z myszką na narzędzia, które już znasz albo zaraz poznasz.
Ściąga flag
| Komenda | Flaga / klawisz | Co robi |
|---|---|---|
htop | -u użytkownik | procesy jednego użytkownika |
htop | -p PID,PID | tylko wskazane procesy |
htop | -t | start w widoku drzewa |
htop | -F tekst | start z filtrem |
htop | -d N | odświeżanie co N dziesiątych sekundy |
htop | -s KOLUMNA | sortowanie po kolumnie |
htop | F3 / F4 | szukaj / filtruj |
htop | F5 | drzewo |
htop | F6, P, M, T, I | sortowanie, odwrócenie |
htop | F7 / F8 | wyższy / niższy priorytet |
htop | F9 | wyślij sygnał (domyślnie SIGTERM) |
htop | Spacja, c, U | zaznacz / z dziećmi / odznacz |
htop | H / K | ukryj wątki programów / jądra |
htop | u, p, F | użytkownik, pełne ścieżki, śledź proces |
btop | -u ms | odświeżanie w milisekundach |
glances | --stdout pola | dane w formie tekstu dla skryptów |
⚠ Typowy błąd
Admin w htop widzi swoją aplikację dwadzieścia razy na liście, każda linijka 2 GB w kolumnie RES. Liczy: dwadzieścia razy dwa, czterdzieści gigabajtów. Serwer ma szesnaście. Pisze do zespołu, że aplikacja łamie prawa fizyki.
To nie dwadzieścia procesów, tylko jeden proces z dwudziestoma wątkami. Wszystkie wątki dzielą tę samą pamięć, więc każdy pokazuje to samo RES. Jeden kucharz, dwadzieścia rąk, jeden fartuch. Naciśnij H, żeby schować wątki, albo F5, żeby zobaczyć drzewo, i liczba wróci do rozsądnych granic.
A nawet przy samych procesach sumowanie RES kłamie, bo biblioteki wspólne są liczone każdemu osobno. Ekspres do kawy z poprzedniej lekcji. Prawdziwe zużycie całego systemu pokazuje pasek Mem na górze.
✎ Zadanie
- Zainstaluj
htop. Na RHEL najpierw włącz EPEL. - Uruchom w tle trzy procesy
sleep 5000 &. - W
htopznajdź je filtremF4, włącz drzewoF5i sprawdź, kto jest ich rodzicem. - Jednemu obniż priorytet klawiszem
F8i zobacz, jak zmienia się kolumnaNI. - Zaznacz spacją wszystkie trzy i zakończ je jednym
F9zSIGTERM. - W
F2dodaj do nagłówka zegar, wyjdź i sprawdź, że powstał plik~/.config/htop/htoprc.
Pokaż rozwiązanie
sudo apt install htop # [Ubuntu]
sudo dnf install htop # [RHEL], po włączeniu EPEL
sleep 5000 & sleep 5000 & sleep 5000 &
htop
# F4: sleep 5000, F5: drzewo, F8 na jednym, Spacja na trzech, F9, Enter
# F2 > Meters > dodaj Clock, wyjście F10
ls -l ~/.config/htop/htoprcW drzewie rodzicem trzech sleep jest Twój Bash. Po F8 kolumna NI zmienia się z 0 na 1:
PID NI CMD
31851 1 sleep 5000Po F9 z SIGTERM wszystkie trzy znikają naraz, a Bash melduje Terminated przy każdym. Jeśli przy F7 htop Ci odmówił, to działałeś jako zwykły użytkownik. Podnosić priorytet wolno tylko rootowi. W kuchni też tylko szef decyduje, kto gotuje pierwszy.
Co dalej
W tej lekcji dwa razy wysłałeś sygnał, ale tak naprawdę jeszcze nie wiesz, czym jest. W następnej lekcji: sygnały i zabijanie procesów. kill, pkill, killall, czemu kill -9 to ostateczność i jak jedna literówka w pkill potrafi zabić … Ciebie.