Wykorzystanie procesora Linux i historia wykonywania procesu

38

Czy jest jakiś sposób, aby zobaczyć, które procesy spowodowały największe użycie procesora?

Mam AMAZON EC2 Linux, którego wykorzystanie procesora sięga 100 procent i zmuszam do ponownego uruchomienia systemu. Nie mogę nawet zalogować się przez SSH (za pomocą putty).

Czy jest jakiś sposób, aby zobaczyć, co powoduje tak wysokie użycie procesora i który proces to spowodował?

Wiem sari topdowodzę, ale nigdzie nie mogłem znaleźć historii wykonywania procesów. Oto obraz z narzędzia do monitorowania Amazon EC2, ale chciałbym wiedzieć, który proces spowodował:

wprowadź opis zdjęcia tutaj

Próbowałem też, ps -eo pcpu,args | sort -k 1 -r | head -100ale nie powiodło się znalezienie tak dużego użycia procesora.

PMoubed
źródło

Odpowiedzi:

34

Można to zrobić na kilka sposobów. Zauważ, że jest całkowicie możliwe wiele procesów w niekontrolowanym scenariuszu powodującym to, a nie tylko jeden.

Pierwszym sposobem jest skonfigurowanie programu pidstat do działania w tle i generowania danych.

pidstat -u 600 >/var/log/pidstats.log & disown $!

To da ci dość szczegółowy obraz działania systemu w dziesięciominutowych odstępach. Sugerowałbym, aby to był twój pierwszy port zawinięcia, ponieważ zapewnia najbardziej wartościowe / wiarygodne dane do pracy.

Występuje z tym problem, głównie jeśli pudełko przechodzi w niekontrolowaną pętlę procesora i generuje ogromne obciążenie - nie masz gwarancji, że Twój proces zostanie wykonany w odpowiednim czasie podczas ładowania (jeśli w ogóle), więc możesz faktycznie przegapić wynik !

Drugim sposobem na to jest włączenie rozliczania procesów. Prawdopodobnie bardziej długoterminowa opcja.

accton on

Umożliwi to rozliczanie procesów (jeśli jeszcze nie zostało dodane). Jeśli wcześniej nie działał, będzie to wymagało czasu.

Po uruchomieniu, powiedzmy 24 godziny, możesz następnie uruchomić takie polecenie (które da takie wyjście)

# sa --percentages --separate-times
     108  100.00%       7.84re  100.00%       0.00u  100.00%       0.00s  100.00%         0avio     19803k
       2    1.85%       0.00re    0.05%       0.00u   75.00%       0.00s    0.00%         0avio     29328k   troff
       2    1.85%       0.37re    4.73%       0.00u   25.00%       0.00s   44.44%         0avio     29632k   man
       7    6.48%       0.00re    0.01%       0.00u    0.00%       0.00s   44.44%         0avio     28400k   ps
       4    3.70%       0.00re    0.02%       0.00u    0.00%       0.00s   11.11%         0avio      9753k   ***other*
      26   24.07%       0.08re    1.01%       0.00u    0.00%       0.00s    0.00%         0avio      1130k   sa
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     28544k   ksmtuned*
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     28096k   awk
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     29623k   man*
       7    6.48%       7.00re   89.26%       0.00u    0.00%       0.00s    

Kolumny są uporządkowane jako takie:

  1. Liczba połączeń
  2. Procent połączeń
  3. Ilość czasu rzeczywistego poświęconego na wszystkie procesy tego typu.
  4. Odsetek.
  5. Czas procesora użytkownika
  6. Odsetek
  7. Czas procesora systemu.
  8. Średnia liczba połączeń we / wy.
  9. Odsetek
  10. Nazwa polecenia

Będziesz szukał typów procesów, które generują najwięcej czasu procesora użytkownika / systemu.

To rozkłada dane jako całkowity czas pracy procesora (górny wiersz), a następnie sposób podziału tego czasu procesora. Rachunkowość procesów rozlicza się poprawnie tylko wtedy, gdy jest włączona, gdy procesy się odradzają, więc prawdopodobnie najlepiej zrestartować system po włączeniu, aby upewnić się, że wszystkie usługi są rozliczane.

To w żadnym wypadku nie daje konkretnego wyobrażenia o tym, jaki proces może być przyczyną tego problemu, ale może dać ci dobre samopoczucie. Ponieważ może to być 24-godzinna migawka, istnieje możliwość wypaczenia wyników, więc pamiętaj o tym. Powinien także zawsze się logować, ponieważ jest to funkcja jądra i w przeciwieństwie do pidstat zawsze będzie generował dane wyjściowe nawet podczas dużego obciążenia.

Ostatnia dostępna opcja wykorzystuje również rozliczanie procesów, dzięki czemu można ją włączyć jak wyżej, ale następnie użyć programu „lastcomm”, aby wygenerować statystyki procesów wykonywanych w czasie wystąpienia problemu wraz ze statystykami procesora dla każdego procesu.

lastcomm | grep "May  8 22:[01234]"
kworker/1:0       F    root     __         0.00 secs Tue May  8 22:20
sleep                  root     __         0.00 secs Tue May  8 22:49
sa                     root     pts/0      0.00 secs Tue May  8 22:49
sa                     root     pts/0      0.00 secs Tue May  8 22:49
sa                   X root     pts/0      0.00 secs Tue May  8 22:49
ksmtuned          F    root     __         0.00 secs Tue May  8 22:49
awk                    root     __         0.00 secs Tue May  8 22:49

To może dać ci kilka wskazówek, co może być przyczyną problemu.

Matthew Ife
źródło
Bardzo ładna i szczegółowa odpowiedź, dobra robota!
Bart De Vos
2
Mnie, nie użyłeś na szczycie, spróbuj! Gromadzi te same informacje co pidstat, ale przedstawia je w interfejsie, który jest znacznie bardziej odpowiedni do interaktywnej eksploracji. Ma również polecenie atopsar, jeśli wolisz raporty w stylu sar.
sciurus
18

Atop jest szczególnie przydatnym demonem do przeglądania szczegółowych informacji o poziomie procesu i domyślnie archiwizuje te dane przez 28 dni. Oprócz prezentacji niesamowitego interfejsu monitorowania w czasie rzeczywistym, możesz określić te pliki dziennika, które mają być otwierane i krok po kroku.

Artykuł daje pewne wyobrażenie o możliwościach, a znajdziesz więcej w podręcznika .

To naprawdę wspaniałe oprogramowanie.

Jeff Ferland
źródło
3

Programy takie jak psmon i Monit może pomocne dla Ciebie. Mogą one monitorować procesy uruchomione w systemie, a jeśli którykolwiek próg (użycie procesora, zużycie pamięci ...) zostanie przekroczony, możesz ustawić, aby wysyłali Ci raport e-mail o tym, co się dzieje.

Możliwe jest również automatyczne ponowne uruchomienie nieprawidłowo działających procesów.

Janne Pikkarainen
źródło
0

Jednym z rozwiązań jest pisanie skryptu, który jest uruchamiany za pomocą jednominutowego crona lub w pętli uśpienia i wysyła ci e-mail / zadanie scp / zrzut do wolumenu ebs ... z odpowiednimi danymi wyjściowymi (prawdopodobnie dmesg, pstree -pa i ps aux, prawdopodobnie vmstat) w momencie, gdy znajdzie średnią obciążenia powyżej pewnego limitu ...

rackandboneman
źródło