htop

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 naszym 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 (w moim wypadku terminator – także opisywany na naszym blogu). 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.

htop_default

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 ;):

htop_customized

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.

Autorzy

Artykuły na blogu są pisane przez osoby z zespołu EuroLinux. 80% treści zawdzięczamy naszym developerom, pozostałą część przygotowuje dział sprzedaży lub marketingu. Dokładamy starań, żeby treści były jak najlepsze merytorycznie i językowo, ale nie jesteśmy nieomylni. Jeśli zauważysz coś wartego poprawienia lub wyjaśnienia, będziemy wdzięczni za wiadomość.