Gdy komputer z Linuxem zwalnia, najpierw sprawdź, czy rzeczywiście zabrakło czasu procesora. Wysoki load average, głośny wentylator i wolne otwieranie plików nie są tym samym co proces stale wykorzystujący CPU. Polecenie top pokaże bieżące obciążenie, a ps pomoże zapisać informacje o znalezionym procesie.
Poniższe przykłady dotyczą narzędzi procps-ng, spotykanych w wielu dystrybucjach. Podstawową obserwację możesz prowadzić jako zwykły użytkownik. Dostęp do części szczegółów innych procesów zależy od uprawnień i ustawień systemu.
Posortuj procesy według użycia CPU
top -o %CPU
Po uruchomieniu poczekaj na kilka odświeżeń. Pierwsza próbka może obejmować inny okres niż kolejne i nie powinna być jedyną podstawą oceny. Obserwuj proces, który utrzymuje się wysoko w tabeli, gdy występuje problem. Zapisz jego PID, użytkownika, nazwę oraz przybliżony poziom obciążenia.
W działającym top klawisz P również przełącza sortowanie według CPU. Klawisz 1 pozwala w typowej konfiguracji zobaczyć poszczególne procesory logiczne. Zakończysz obserwację przez q. Jeśli ustawienia ekranu różnią się od przykładu, sprawdź pomoc programu: zapisany profil top może zmieniać widok.
W standardowym trybie Irix 100% przy procesie odpowiada w przybliżeniu pełnemu wykorzystaniu jednego procesora logicznego. Proces wielowątkowy może przekraczać 100%. Tryb Solaris przelicza tę wartość względem całej liczby CPU. Dlatego przed porównywaniem wyniku z procentem całego systemu upewnij się, jaką skalę pokazuje narzędzie.
Przykład: jeden zajęty wątek może blokować aplikację
Na komputerze z ośmioma procesorami logicznymi aplikacja wykorzystująca jeden z nich do granic możliwości może pokazywać około 100% w procesowej skali top, choć ogólne użycie CPU pozostaje znacznie niższe. Jeśli zadanie jest jednowątkowe, wolne zasoby pozostałych CPU nie przyspieszą automatycznie tego fragmentu pracy.
Włącz widok wątków klawiszem H albo obserwuj konkretny proces poleceniem:
top -H -p 1234
Zastąp 1234 znalezionym PID. Widok pomoże ustalić, czy obciążenie jest rozłożone na wiele wątków, czy skupione w jednym. Nie zakładaj, że każdy wiersz oznacza osobny niezależny program. W tym trybie obserwujesz również wątki tego samego procesu.
Zapisz identyfikację przez ps
Do przygotowania krótkiego raportu możesz użyć:
ps -eo pid,ppid,user,pcpu,pmem,etime,comm --sort=-pcpu | head -n 16
Raport pokazuje PID, proces nadrzędny, użytkownika, procent CPU i pamięci, czas życia oraz nazwę. Procent CPU w ps jest uśredniany względem czasu życia procesu; nie jest odpowiednikiem ostatniego krótkiego odświeżenia top. Proces dawniej intensywny może mieć wysoki wynik mimo obecnego spokoju, a nowy skok obciążenia może zostać rozmyty przez długą historię.
Jeżeli potrzebujesz pełnej linii uruchomienia konkretnego procesu, sprawdź:
ps -p 1234 -o pid,ppid,user,etime,args
Argumenty mogą zawierać poufne wartości lub ścieżki, dlatego przejrzyj wynik przed udostępnieniem. PID może zostać ponownie użyty po zakończeniu procesu, więc przy późniejszej zmianie upewnij się, że nadal dotyczy tej samej aplikacji.
Wysoki load average nie zawsze oznacza zajęty procesor
Load average uwzględnia zadania gotowe do pracy oraz zadania w określonych stanach nieprzerywalnego oczekiwania, często związanych z operacjami wejścia i wyjścia. Wysoka wartość może więc współistnieć z wolnym CPU, gdy procesy czekają na dysk lub inny zasób.
Spójrz na podsumowanie CPU w top. Duży udział czasu użytkownika wskazuje pracę aplikacji, czasu systemowego — pracę jądra. Wysokie oczekiwanie I/O jest wskazówką do sprawdzenia operacji dyskowych, a czas steal w maszynie wirtualnej może wskazywać oczekiwanie na zasoby hosta. Te wskaźniki mają ograniczenia pomiaru; nie zamieniaj pojedynczej wartości w dowód uszkodzenia podzespołu.
Znajdź zadanie, które stoi za procesem
Rozpoznany proces może wykonywać poprawną pracę: kompilację, kodowanie filmu, indeksowanie plików lub kopię. Porównaj obciążenie z postępem zadania. Jeśli postęp rośnie i po zakończeniu CPU wraca do spoczynku, nie musisz traktować intensywności jako błędu.
W systemie z systemd polecenie systemctl status 1234 może wskazać jednostkę, do której należy proces. Jeśli ustalisz nazwę usługi, zawęź dziennik do niej i czasu problemu, zamiast czytać cały journal. Dla usługi użytkownika potrzebne może być użycie kontekstu --user. Brak rozpoznanej jednostki nie oznacza automatycznie podejrzanego procesu.
Zatrzymuj przez aplikację lub właściwą usługę
Najpierw zapisz pracę i zakończ program normalnie. Dla usługi użyj jej poprawnego mechanizmu zatrzymania po ustaleniu skutków. Wymuszone zabicie może przerwać zapis pliku lub bazy, a nadzorowany proces może natychmiast uruchomić się ponownie. Samo powracanie PID nie jest dowodem infekcji.
Jeśli problem dotyczy kontenera, sprawdź jego zadanie i ograniczenia, nie kasuj wolumenów ani danych dla obniżenia użycia CPU. Gdy przy wysokim obciążeniu spada wydajność, uzupełnij obserwację o temperatury w Linuxie. A jeśli oczekiwanie dotyczy dysku, pomocne będzie sprawdzenie zajętego miejsca i źródła operacji dyskowych, zamiast szukania największego procentu CPU za wszelką cenę.








