Wie protokolliere ich die CPU-Auslastung?

30

Wie protokolliere ich die CPU-Last in einer Datei, um ein Problem zu untersuchen?

Tommyk
quelle

Antworten:

42

Das funktioniert sehr gut:

 while true; do uptime >> uptime.log; sleep 1; done
  • Dadurch wird Ihre CPU-Last jede Sekunde protokolliert und an eine Datei angehängt uptime.log.

    Sie können diese Datei dann in Gnumeric oder das OpenOffice-Arbeitsblatt importieren, um ein schönes Diagramm zu erstellen (wählen Sie beim Import 'Durch Leerzeichen getrennt' aus).

Wie Scaine bemerkte, wird dies nicht ausreichen, um das Problem zu diagnostizieren. Führen Sie also zusätzlich Folgendes aus (oder verwenden Sie seine Antwort für diesen Teil):

while true; do (echo "%CPU %MEM ARGS $(date)" && ps -e -o pcpu,pmem,args --sort=pcpu | cut -d" " -f1-5 | tail) >> ps.log; sleep 5; done
  • Dadurch werden ps.logalle fünf Sekunden die zehn meist CPU-belasteten Prozesse an eine Datei angehängt.

    Beachten Sie, dass dies nicht die vollständige Bootsladung an Informationen ist top, die Sie erhalten würden. Dies sind nur die Top 10 und nur ihre CPU-Auslastung, Speicherauslastung und das erste Argument (dh ihr Befehl ohne weitere Argumente, wie in /usr/bin/firefox).

Nachdem Sie mithilfe einer Kalkulationstabelle ein Diagramm erstellt haben, um festzustellen, wann die CPU-Auslastung das Dach überschritten hat, können Sie diese Datei nach dem nächstgelegenen Zeitpunkt durchsuchen, um festzustellen, durch welchen Prozess dies verursacht wurde.

So sehen diese Dateien aus:

uptime.log

~$ cat uptime.log 
 22:57:42 up 1 day,  4:38,  4 users,  load average: 1.00, 1.26, 1.21
 22:57:43 up 1 day,  4:38,  4 users,  load average: 0.92, 1.24, 1.21
 22:57:44 up 1 day,  4:38,  4 users,  load average: 0.92, 1.24, 1.21
 22:57:45 up 1 day,  4:38,  4 users,  load average: 0.92, 1.24, 1.21
 ...

ps.log

%CPU %MEM ARGS Mo 17. Jan 23:09:47 CET 2011
 0.7  0.9 /usr/bin/compiz
 0.8  0.5 /usr/lib/gnome-panel/clock-applet
 1.1  1.7 /opt/google/chrome/chrome
 1.2  0.3 /usr/bin/pulseaudio
 1.8  4.0 /opt/google/chrome/chrome
 2.6  1.5 /opt/google/chrome/chrome
 2.6  3.2 /usr/bin/google-chrome
 3.6  2.6 /opt/google/chrome/chrome
 4.9  1.5 /usr/bin/X
 5.7  1.6 /opt/google/chrome/chrome
%CPU %MEM ARGS Mo 17. Jan 23:09:48 CET 2011
 0.7  0.9 /usr/bin/compiz
 0.8  0.5 /usr/lib/gnome-panel/clock-applet
 1.0  1.7 /opt/google/chrome/chrome
 1.2  0.3 /usr/bin/pulseaudio
 1.8  4.0 /opt/google/chrome/chrome
 2.6  1.5 /opt/google/chrome/chrome
 2.6  3.2 /usr/bin/google-chrome
 3.6  2.6 /opt/google/chrome/chrome
 4.9  1.5 /usr/bin/X
 5.7  1.6 /opt/google/chrome/chrome
 ...
Stefano Palazzo
quelle
3
Gibt dies tatsächlich die richtige CPU-Auslastung aus? Ich habe dies auf Centos versucht und nur die Speichernutzung war korrekt :(
Menelaos Bakopoulos
Wie kann ich diesen Befehl auf meinem VPS ausführen lassen, auch nachdem ich die Putty-Verbindung beendet habe?
Lucas Bustamante
1
Wenn die von gemeldete CPU-Auslastung psunsinnig ist, versuchen Sie, sie als root auszuführen.
Stefano Palazzo
Wie kann ich diesen Befehl auf meinem VPS ausführen lassen, auch nachdem ich die Putty-Verbindung beendet habe?
Mostafa
10

Sie können den topBefehl im Batch-Modus ausführen, indem Sie die -bOption verwenden und dann in eine Datei ausgeben.

Öffnen Sie beim Starten Ihres PCs ein Terminal und führen Sie es aus

top -b > ~/cpu.txt

Wenn Ihr PC dann einfriert, öffnen Sie einfach die (wahrscheinlich große) Textdatei und überprüfen Sie den letzten Eintrag auf Details zu dem, was gerade vor dem Absturz ausgeführt wurde. In der Tat wird die Datei so dumm sein, dass Sie besser a tail -250 ~/cpu.txtausführen sollten.

Überprüfen Sie auch Ihre Datei /var/log/kern.log, falls Ihr Problem hardwarebezogen ist (unwahrscheinlich, wenn dies erst nach einem Upgrade geschieht, aber dennoch überprüft werden sollte).

Scaine
quelle
0

Für diejenigen, die diesen Befehl nach dem Ende Ihrer Putty-Sitzung (SSH-Client) ausführen müssen. Sie können Befehl verwenden screen(oder installieren Sie es mit apt-get)

Mostafa
quelle