Htop – funkcjonalny monitor procesów
HTOP jest ulepszoną wersją programu top. W mojej głowie zawsze był on Hyper TOPem (htop). Niemniej, prawda o nazwie jest odrobinę inna. Program wziął ją od imienia twórcy, który niestety nie ma na imię Hyper, tylko Hisham
HTOP jest ulepszoną wersją programu top. W mojej głowie zawsze był on Hyper TOPem (htop). Niemniej, prawda o nazwie jest odrobinę inna. Program wziął ją od imienia twórcy, który niestety nie ma na imię Hyper, tylko Hisham :(
Jako ciekawostkę chciałbym dodać, iż mamy tutaj też wątek polski. Inspiracją dla Hishama był pinfo
, program służący do lepszego przeglądania stron info. Nazwa pinfo
pochodzi od “Przemek info” :)
Instalacja
W przeciwieństwie do opisanego wcześniej na blogu top, program htop
nie jest domyślnie zainstalowany. Do jego instalacji niezbędne jest repozytorium EPEL lub własnoręczne skompilowanie go. Chciałbym tutaj zaznaczyć, iż firma EuroLinux nie odpowiada za pakiety wychodzące poza skład standardowego repozytorium. Niemniej, dla wygody administratorów w repozytorium EuroLinuxa znajduje się pakiet epel-release, który instaluje pliki .repo wraz z kluczami, licencją GPL oraz plikiem preset używanym przez systemd.
By zainstalować htop, możemy wykonać:
sudo yum install -y epel-release sudo yum install -y htop
Kompilowanie htop
W celu kompilacji i instalacji skompilowanego htop
można użyć:
# Instalacja zależności sudo yum install -y @development git libncursesw ncurses-devel # Kompilacja htop git clone https://github.com/hishamhm/htop.git cd htop ./autogen.sh && ./configure && make # Instalacja htop sudo make install
Personalizacja htop
Personalizację htop możemy zacząć od zajrzenia do zakładki pomocy (klawisz F1
z dolnego menu). W wielu przypadkach wystąpi pewien mały zgrzyt – z reguły F1
jest przypisane do pomocy emulatora terminala (także opisywany na blogu terminator). Co możemy zrobić w takim wypadku? Być może zabrzmi to odrobinkę naiwnie, ale należy kliknąć myszką F1
. Nie, to nie jest żart – wbrew powszechnej opinii istnieje możliwość pisania aplikacji konsolowych ze wsparciem dla przycisków myszy. Htop jest wspaniałym przykładem programu oferującego tę funkcjonalność. Innym wyjściem jest użycie klawisza h
lub ?
.
Po przeczytaniu pomocy możemy zacząć konfigurację htop. Sam plik konfiguracyjny znajduje się w .config/htop/htoprc
i mimo ostrzeżenia autora zawartego w komentarzu pliku, jest on dużo bardziej czytelny i przyjazny do edycji niż plik programu top
.
Poniżej wygląd domyślnej konfiguracji htop.
By rozpocząć edycję ustawień htop, możemy użyć F2
lub kliknąć odpowiedni przycisk. Pierwszą rzeczą, na którą chciałbym zwrócić uwagę, jest fakt, iż sekcja Meters ma dwie kolumny, a położenie poszczególnych elementów możemy zmieniać dowolnie. W tym celu wybieramy element (lub klikamy na niego myszką) i klawiszem Enter
wchodzimy w tryb edycji lub dodawania go. Strzałkami umieszczamy go na wyselekcjonowanym miejscu. By zmienić styl wyświetlania elementu (np. wykres słupkowy, informacja tekstowa czy tryb imitujący wyświetlacz siedmiosegmentowy), należy użyć klawisza spacji.
Jedną zmianą, którą z reguły wprowadzam, jest usunięcie informacji o utylizacji procesorów, rozbitej na poszczególne procesory. W przypadku posiadania serwera, który ma więcej niż 8 wątków lub rdzeni (zależy do konfiguracji/dostępności HT (Hyperthreading) lub SMT (Simultaneous Multi-Threading)), ilość miejsca zajmowana przez informację o CPU jest niepraktyczna. W tym celu wybieram odpowiednie kolumny i przyciskiem delete
usuwam. Dla osób nielubiących klawiatur istnieje też możliwość wyklikania. Następnie dodaję metrykę CPU average, umieszczam ją na samej górze lewej kolumny oraz zmieniam sposób wyświetlania informacji na Text.
Podobne czynności wykonuję, aż moje kolumny zaczną wyglądać następująco:
Lewa kolumna:
- Load average [Text]
- CPU [Text]
- Task Counter [Text]
- Memory [Text]
- Swap [Text]
Prawa kolumna:
- Clock [Text]
- Uptime [Text]
- Battery [Bar]
Oczywiście informacje o baterii wynikają z faktu, że korzystam z notebooka.
Następnie proponuję przejść do sekcji Dispaly options, czyli ustawienia wyświetlania, gdzie zgodnie z moim doświadczeniem mam włączone następujące flagi:
- Hide kernel threads – opcję tę czasem można odznaczyć. Niemniej, procesy jądra z reguły nie są interesujące, a skutecznie tworzą szum, który musimy odfiltrować.
- Dispaly threads in a different color.
- Highlight program “basename”.
- Highlight large numbers in memory counters.
- Detailed CPU time (SYSTEM/IO-wait/HARD-IRQ/Soft-IRQ/Steal/Guest).
- Count CPUs from 0 instead of 1 – opcja ta ma znaczenie, jeśli używamy metryk rozdzielających.
Ustawienia sekcji kolor należy zmienić, jeśli nasza paleta kolorów ustawiona przez emulator terminala nie współgra z htopem. Z reguły problematyczne jest tło. Dla przykładu, paleta Solarized Dark
potrafi być nieczytelna z domyślnymi kolorami htop. By móc łatwiej odczytywać tekst, należy zmienić schemat kolorów htop.
Następne zmiany odbywają się w sekcji Columns, gdzie usuwam kolumnę VIRT (M_SIZE) i na tym kończę edycję w tej sekcji. Jako ciekawostkę chciałbym dodać możliwość dodania kolumny OOM. Jest to punktowa wartość służąca do podjęcia decyzji, który proces zostanie zabity, w przypadku gdy skończy nam się pamięć.
Po edycji należy zatwierdzić zmiany klawiszem F10
. Następuje wtedy zapisanie pliku konfiguracyjnego do $HOME/.config/htop/htoprc
.
Gotowe ustawienia htop akceptowane przez autora ;):
Wyszukiwanie/filtrowanie/sortowanie procesów
By wyszukać procesy, możemy użyć klawisza F3
. Wyszukiwanie będzie poszukiwać pojedynczego procesu, który zostanie wybrany do dalszej edycji (np. ustawienia nice, zabicie lub pobranie informacji o zmiennych środowiskowych). Z kolei filtrowanie procesów pokaże nam wszystkie procesy spełniający zadany warunek (nazwa) – poniższy przykład filtrował procesy po nazwie haroopad. Ważnym spostrzeżeniem jest fakt, iż filtrowanie odbywa się po zwykłym ciągu znaków, a nie po wyrażeniu regularnym.
Inną możliwością wyszukiwania jest wyszukanie procesu po numerze PID. W tym celu należy go po prostu wpisać. Wyszukiwanie jest inkrementalne. By zrozumieć, co mam na myśli, proszę sobie wyobrazić, iż mamy 3 procesy w systemie:
1 – systemd
123 – auditd
12345 – spotify
oraz nie istnieją procesy z PID 12,1234.
W takim wypadku nasze przejścia wraz ze wpisywaniem kolejnych numerów będą wyglądać następująco:
“” ()
“1” -> (systemd)
“12” -> (systemd)
“123” -> (auditd)
“1234” -> (auditd)
“12345” -> (spotify).
By posortować procesy, używamy F6
, a następnie z menu wybieramy kolumnę, po której chcemy, by procesy były sortowane. Istnieje też możliwość użycia myszki, by kliknąć wytypowaną kolumnę. Rzeczą może trywialną, lecz wartą wspomnienia jest fakt, iż sortowanie procesów wg zadanego kryterium można łączyć z filtrowaniem. Jeśli zajdzie potrzeba odwrócenia warunku sortowania, należy użyć klawisza I
. Innymi skrótami, które mogą zostać użyte, są <
i >
. Jednak w przeciwieństwie do top
nie zmienią one, odpowiednio w lewo lub prawo, kolumny, po której sortujemy, lecz wywołują menu sortowania.
Ostatnim filtrem, który chciałbym zaprezentować w programie htop, jest filtrowanie procesów ze względu na użytkownika. W tym celu używamy klawisza u
, a następnie dokonujemy wyboru z menu, które pojawi się nam po lewej stronie. Wybór użytkownika może odbyć się przy pomocy strzałek/myszki lub poprzez wpisanie początku jego nazwy. Jest to dużo lepsze rozwiązanie niż w top, gdzie wymagane jest wpisanie pełnej nazwy użytkownika.
Inne przydatne funkcje
p
– wypisuje pełną ścieżkę komendy
e
– pokazuje środowisko (enviroment) wybranego procesu.
Podziękowania
Jak zwykle chciałbym podziękować za czas spędzony na czytaniu naszego bloga. Jeśli tekst się Wam spodobał, to zachęcam do wysłania go swoim współpracownikom oraz zapisania się na newsletter.