Linux-CPU-Auslastung und Prozessausführungsverlauf

38

Gibt es eine Möglichkeit zu sehen, welche Prozesse die meiste CPU-Auslastung verursacht haben?

Ich habe AMAZON EC2 Linux, dessen CPU-Auslastung 100 Prozent erreicht, und veranlasse mich, das System neu zu starten. Ich kann mich nicht einmal über SSH (Using Putty) anmelden.

Gibt es eine Möglichkeit zu erkennen, welche Ursachen eine so hohe CPU-Auslastung haben und welcher Prozess dies verursacht hat?

Ich kenne sarund topbefehle, konnte aber nirgendwo einen Verlauf der Prozessausführung finden. Hier ist das Bild vom Amazon EC2-Überwachungstool, aber ich möchte wissen, welcher Prozess dies verursacht hat:

Bildbeschreibung hier eingeben

Ich habe auch versucht, ps -eo pcpu,args | sort -k 1 -r | head -100aber kein Glück, eine so hohe CPU-Auslastung zu finden.

PMoubed
quelle

Antworten:

34

Es gibt verschiedene Möglichkeiten, dies zu tun. Beachten Sie, dass es durchaus möglich ist, dass viele Prozesse in einem außer Kontrolle geratenen Szenario dies verursachen und nicht nur einen.

Die erste Möglichkeit besteht darin, pidstat so einzurichten, dass es im Hintergrund ausgeführt wird und Daten erzeugt.

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

Auf diese Weise erhalten Sie alle zehn Minuten einen detaillierten Überblick über den Betrieb des Systems. Ich würde vorschlagen, dass dies Ihre erste Anlaufstelle ist, da sie die wertvollsten / zuverlässigsten Daten liefert, mit denen Sie arbeiten können.

Dies ist vor allem dann problematisch, wenn die Box in eine außer Kontrolle geratene CPU-Schleife gerät und eine enorme Last erzeugt. Sie können nicht garantieren, dass Ihr tatsächlicher Prozess unter Last rechtzeitig ausgeführt wird (wenn überhaupt), sodass Sie die Ausgabe möglicherweise verpassen !

Die zweite Möglichkeit besteht darin, die Prozessabrechnung zu aktivieren. Möglicherweise eher eine langfristige Option.

accton on

Dies aktiviert die Prozessabrechnung (falls nicht bereits hinzugefügt). Wenn es zuvor nicht ausgeführt wurde, wird es einige Zeit dauern, bis es ausgeführt wird.

Nach einer Laufzeit von beispielsweise 24 Stunden können Sie einen solchen Befehl ausführen (der eine Ausgabe wie diese erzeugt).

# 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    

Die Spalten sind wie folgt angeordnet:

  1. Anzahl der Anrufe
  2. Prozentsatz der Anrufe
  3. Menge an Echtzeit, die für alle Prozesse dieses Typs aufgewendet wurde.
  4. Prozentsatz.
  5. Benutzer-CPU-Zeit
  6. Prozentsatz
  7. System-CPU-Zeit.
  8. Durchschnittliche IO-Aufrufe.
  9. Prozentsatz
  10. Befehlsname

Was Sie suchen, sind die Prozesstypen, die die meiste Benutzer- / System-CPU-Zeit erzeugen.

Dies unterteilt die Daten in die Gesamtmenge der CPU-Zeit (die oberste Zeile) und in die Art und Weise, wie diese CPU-Zeit aufgeteilt wurde. Die Prozessabrechnung wird nur dann ordnungsgemäß ausgeführt, wenn Prozesse gestartet werden. Daher ist es wahrscheinlich am besten, das System neu zu starten, nachdem es aktiviert wurde, um sicherzustellen, dass alle Dienste berücksichtigt werden.

Dies gibt Ihnen auf keinen Fall eine genaue Vorstellung davon, welcher Prozess möglicherweise die Ursache für dieses Problem ist, sondern vermittelt Ihnen ein gutes Gefühl. Da es sich um einen 24-Stunden-Schnappschuss handeln könnte, kann es zu verzerrten Ergebnissen kommen. Es sollte auch immer protokollieren, da es ein Kernel-Feature ist und im Gegensatz zu pidstat auch bei hoher Last immer eine Ausgabe erzeugt.

Die letzte verfügbare Option verwendet auch die Prozessabrechnung, sodass Sie sie wie oben beschrieben aktivieren können. Verwenden Sie dann jedoch das Programm "lastcomm", um Statistiken zu Prozessen zu erstellen, die zum Zeitpunkt des Problems ausgeführt wurden, sowie CPU-Statistiken für jeden Prozess.

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

Dies könnte Ihnen auch einige Hinweise geben, was das Problem verursachen könnte.

Matthew Ife
quelle
Sehr nette & ausführliche Antwort, gute Arbeit!
Bart De Vos
2
MIfe, es hast du nicht benutzt, probiere es aus! Es sammelt die gleichen Informationen wie pidstat, präsentiert sie jedoch in einer Oberfläche, die für die interaktive Erkundung viel besser geeignet ist. Es gibt auch einen atopsar-Befehl, wenn Sie Berichte im sar-Stil bevorzugen.
Sciurus
18

Atop ist ein besonders praktischer Daemon, um Drilldowns auf Prozessebene zu betrachten und diese Daten standardmäßig 28 Tage lang zu archivieren. Neben der Darstellung einer beeindruckenden Echtzeit-Überwachungsoberfläche können Sie die zu öffnenden und schrittweisen Protokolldateien angeben.

Der Artikel gibt einen Überblick über die Funktionen, und Sie finden weitere Informationen in der Manpage .

Es ist wirklich ein wunderbares Stück Software.

Jeff Ferland
quelle
3

Programme wie psmon und monit sind möglicherweise hilfreich für Sie. Diese können die Prozesse überwachen, die auf Ihrem System ausgeführt werden, und wenn ein Schwellenwert (CPU-Auslastung, Speicherauslastung ...) überschritten wird, können Sie festlegen, dass sie Ihnen einen E-Mail-Bericht über die aktuellen Vorgänge senden.

Es ist auch möglich, die fehlerhaften Prozesse automatisch neu zu starten.

Janne Pikkarainen
quelle
0

Eine Lösung besteht darin, ein Skript zu schreiben, das über eine Minute Cron oder in einer Schlafschleife ausgeführt wird und Ihnen einen E-Mail / SCP-Job / Dump an ein EBS-Volume sendet ... mit der entsprechenden Ausgabe (dmesg, pstree -pa und ps aux, wahrscheinlich) vmstat) in dem Moment, in dem der Lastdurchschnitt über einer bestimmten Grenze liegt ...

Rackandboneman
quelle