Wie protokolliere ich die CPU-Last in einer Datei, um ein Problem zu untersuchen?
quelle
Wie protokolliere ich die CPU-Last in einer Datei, um ein Problem zu untersuchen?
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.log
alle 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
...
ps
unsinnig ist, versuchen Sie, sie als root auszuführen.Sie können den
top
Befehl im Batch-Modus ausführen, indem Sie die-b
Option 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.txt
ausfü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).
quelle
Ich habe eine großartige Antwort von Christopher auf diese Frage unter Unix und Linux gefunden , die Folgendes verwendet
top
:Dies gibt Ihnen 1 Iteration von
top
dann stoppen und schieben Sie es dann in eine Datei.quelle
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 mitapt-get
)quelle