Jak znaleźć procesy zużywające dużo zasobów za pomocą wiersza poleceń w Linuksie
Podsumowanie
- Wszystkie procesy w systemie Linux wymagają pamięci RAM i cykli procesora, co może prowadzić do rywalizacji o te zasoby.
- Narzędzia takie jak free, top i htop pomagają zidentyfikować programy zużywające dużo pamięci i wysokie użycie procesora.
- Używaj poleceń takich jak ps i top, aby zidentyfikować i zakończyć problematyczne procesy oraz przywrócić wydajność systemu.
Każdy fragment kodu działający na twoim komputerze z Linuxem potrzebuje pamięci RAM i cykli procesora. Proces wykorzystujący więcej niż swoją uczciwą część spowalnia inne procesy. Oto jak znaleźć winowajców.
Sztuka równoważenia procesów i zasobów
Pamięć RAM i cykle CPU są zasobami skończonymi. Gdy kod programu jest wykonywany, tworzy się proces. Oprócz procesów systemu operacyjnego istnieją procesy, które uruchamiają twoje środowisko pulpitu oraz wszelkie polecenia lub aplikacje, które uruchomisz. Wszystkie one wymagają czasu procesora i pamięci RAM.
Linux i CPU muszą zarządzać przydziałem pamięci RAM oraz równoważyć i planować obciążenie CPU pomiędzy rdzeniami i wątkami, aby upewnić się, że wszystkie procesy otrzymują część zasobów.
Aplikacje powinny być pisane tak, aby nie monopolizowały twojego komputera, ale czasami coś idzie nie tak i procesy mogą próbować przejąć całą twoją pamięć RAM i monopolizować twój procesor.
To wtedy musisz być w stanie zidentyfikować proces pasa startowego.
Badanie wysokiego zużycia pamięci RAM
Linux używa wolnej pamięci RAM jako pamięci podręcznej. Chociaż może się wydawać, że cała twoja pamięć RAM jest używana, to prawdopodobnie fałszywe wrażenie. Jeśli zajdzie taka potrzeba, elementy są usuwane z pamięci podręcznej, aby przydzielić pamięć RAM procesom standardowym.
Polecenie free
Polecenie free daje przegląd wykorzystania pamięci w formie migawki. Opcja -h (human) sprawia, że wynik jest łatwiejszy do odczytania.
Uruchomiłem polecenie trzy razy w oknie terminala. W innym oknie terminala uruchomiłem program, który wymagał dużych ilości pamięci RAM.
free -h
free -h
free -hDarmowa pamięć RAM spada w alarmującym tempie. Musimy zidentyfikować proces lub procesy, które za to odpowiadają.
Odczytywanie /proc/meminfo
Narzędzia takie jak top i htop pobierają informacje o pamięci z pseudopliku /proc/meminfo. Ponieważ /proc/meminfo zachowuje się jak plik, możemy używać powszechnych narzędzi takich jak cat i less do przeglądania jego zawartości.
less /proc/meminfoWynik różni się w zależności od tego, który kernel uruchamiasz i jaka jest architektura twojego procesora, ale standardowe pola zawsze są obecne. Jest to dobry sposób, aby zobaczyć bardziej szczegółowy podgląd dokładnie, jaki rodzaj użycia pamięci zajmuje największą część twojej RAM, ale nie identyfikuje poszczególnych procesów.
Używanie polecenia vmstat do znajdowania programów zużywających dużo pamięci
Polecenie vmstat może dać nam obraz użycia pamięci wirtualnej w czasie.
Aby zobaczyć cztery zestawy wyników, pięć sekund po sobie, z wartościami pokazanymi w MiB, możemy użyć tego polecenia:
vmstat 5 4 -S MUżywanie top i htop do znajdowania aplikacji zużywających dużo pamięci
Zarówno top, jak i htop zapewniają dynamiczny pulpit informacyjny systemu, z tabelą procesów pokazującą jeden wiersz informacji na proces.
Aby posortować tabelę procesów według użycia RAM, naciśnij Shift+M.
Program o nazwie gobble został uruchomiony dwukrotnie. Wykorzystuje dwie trzecie pamięci RAM. Zabijemy te dwa procesy.
Naciśnij k, aby uruchomić funkcję zabijania.
W programie top musimy podać identyfikator procesu, który chcemy zakończyć. Domyślnie funkcja kill użyje identyfikatora procesu z pierwszej linii. Ponieważ posortowaliśmy tabelę według użycia pamięci RAM, to jest identyfikator, którego chcemy użyć, więc możemy po prostu nacisnąć Enter.
Pytają nas, jaki sygnał powinniśmy wysłać do procesu. SIGKILL to sygnał numer dziewięć. Musimy wprowadzić cyfrę dziewięć, a następnie nacisnąć Enter jeszcze raz.
Jeśli powtórzymy ten proces dwukrotnie, oba przypadki programu gobble zostaną zakończone.
W htop jest to bardzo podobne. Przesuń pasek podświetlenia na proces, który chcesz zakończyć. Naciśnij k, aby rozpocząć proces zabijania. Po lewej stronie okna pojawia się lista sygnałów.
Przesuń mały pasek podświetlenia do wpisu 9 SIGKILL, a następnie naciśnij Enter.
Używanie polecenia ps do znajdowania procesów zużywających dużo pamięci
Polecenie ps daje nam identyfikator procesu (PID) i może również podać identyfikator procesu nadrzędnego. Jeśli masz wiele procesów zużywających pamięć, które zostały uruchomione przez ten sam proces nadrzędny, zakończenie procesu nadrzędnego kończy również jego procesy podrzędne.
Użyjemy opcji -e (każdy proces) oraz -o (własny format wyjściowy). W naszym output żądamy:
- pid: Identyfikator procesu.
- ppid: Identyfikator procesu nadrzędnego.
- comm: Nazwa polecenia.
- %mem: Procent pamięci RAM używanej przez ten proces.
- rss: Rozmiar zestawu rezydenta. Jest to nieprzydzielona pamięć fizyczna używana przez proces, wyrażona w kilobajtach. Należy zauważyć, że nie uwzględnia ona zarezerwowanej pamięci, która faktycznie nie została użyta, ani nie uwzględnia pamięci wirtualnej. Dla aktualnego zadania jest to jednak całkowicie dobry wskaźnik.
- %cpu: Jest to czas pracy procesora, jaki proces miał do tej pory, podzielony przez czas, w którym proces działał.
Sortujemy według pamięci. Znak minus oznacza sortowanie w odwrotnej kolejności. Możemy uzyskać 10 najgorszych przypadków, przekazując wyniki przez head.
ps -e -o pid,ppid,comm,%mem,rss,%cpu --sort=-%mem | head -10Badanie wysokiego zużycia CPU
Procedura śledzenia procesów zużywających nadmiar CPU jest bardzo podobna do tych, które omawialiśmy w przypadku procesów zużywających dużo pamięci. Musimy zidentyfikować winny proces lub procesy i uzyskać ich identyfikator procesu.
Używanie top i htop do znajdowania procesów obciążających CPU
Możemy używać top i htop prawie dokładnie tak, jak robiliśmy to, aby śledzić procesy żrące pamięć. Domyślnie top i htop sortują swoje tabele procesów według kolumny %CPU. Jeśli zmieniłeś kolumnę sortowania, możesz nacisnąć Shift+P (dla procesora), aby przywrócić sortowanie według %CPU.
Istnieje proces zwany drain, który prawie cały czas procesora wykorzystuje dla siebie. Po zidentyfikowaniu winowajcy, możemy nacisnąć k, aby wywołać funkcję zakończenia procesu.
Używanie polecenia mpstat do monitorowania użycia CPU
Musisz zachować ostrożność, gdy zabijasz procesy. Niektóre, zwłaszcza procesy systemowe, powinny pozostać nienaruszone. Polecenie mpstat daje ci migawkę użycia CPU przez procesy użytkownika i systemowe.
Będziesz musiał zainstalować mpstat na Fedorze i Manjaro, ale był już zainstalowany na naszym komputerze z Ubuntu.
W Fedorze musisz wpisać:
sudo dnf install sysstatNa Manjaro polecenie to:
sudo pacman -S sysstatUżyjemy opcji -P all (wszystkie procesory) i poprosimy o raporty co dwie sekundy, w sumie pięć raportów.
mpstat -P all 2 5Możemy zobaczyć, że obciążenie procesora pochodzi od użytkownika, a nie od systemu. Szósty wiersz jest średnią z pięciu raportów, o które prosiliśmy.
Używanie ps do znajdowania programów obciążających procesor
Możemy również użyć ps, aby szukać procesów obciążających CPU. Przy niewielkiej modyfikacji naszego wcześniejszego polecenia możemy sortować według CPU.
ps -e -o pid,ppid,comm,%mem,rss,%cpu --sort=-%cpu | head -10Wpis o ps to fałszywa flaga, wiemy, że działał tylko przez ułamek sekundy. W drugim wierszu możemy zobaczyć identyfikator procesu procesu, który monopolizuje CPU. Mając te informacje, możemy użyć top lub htop, albo polecenia kill, aby zakończyć proces.
Trochę porządków
Większość czasu twój komputer z Linuxem będzie działał prawidłowo, wszystkie procesy funkcjonując w dopuszczalnych granicach. Jeśli zauważysz, że twój komputer staje się powolny, zbadaj to za pomocą tych narzędzi. Możesz znaleźć proces obciążający pamięć lub procesor, działający bez kontroli.















