Wie protokolliere ich die CPU-Auslastung pro Prozess?

18

Ich habe eine Box auf Linode, die sich seltsam verhält. Hin und wieder werden CPU- und Festplatten-E / A-Vorgänge zu 100% ausgeführt, und der Server reagiert nicht mehr und muss gestartet werden. Ich würde gerne besser untersuchen, was los ist, aber ich weiß nicht, wie ich herausfinden kann, wer für all diese CPU und I / O verantwortlich ist. Ich verwende Gentoo 2.6.18.

Helder S. Ribeiro
quelle

Antworten:

20

Sie könnten versuchen, so etwas zu tun:

while true; do ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10 >> logfile.txt; printf "\n" >> logfile.txt; sleep 3; done

Das würde Ihnen die zehn wichtigsten Prozesse in Bezug auf die CPU-Auslastung zeigen. Sie können die Anzahl der angezeigten Prozesse ändern, indem Sie die 10 in "head -10" in eine andere Zahl ändern. Außerdem können Sie festlegen, wie oft die 3 in "sleep 3" geändert oder der Teil "sleep 3" vollständig entfernt werden soll.

shawn
quelle
5
Stellen Sie sicher, dass Sie eine Art Schlaf haben, sonst besteht eine gute Chance, dass Ihr Shell-Prozess immer in den Top 10 sein wird. :)
jedberg
Ich denke, es sort -nrwäre besser, numerisch zu sortieren (zumindest auf meinen Ubuntu / Debian-Boxen)
siehe
2
Übrigens, Sie sollten diesem Prozess höchste Priorität einräumen, damit er auch bei Spitzenbelastungen (die ja der Punkt seiner Lebensdauer sind) nützlich bleibt.
Spaceriver
12

Wenn Sie darauf achten, wird ein binäres Protokoll erstellt, das so ziemlich alles enthält, was Sie sich wünschen. Anschließend können Sie mit einem Top wie gui die Zeitscheiben des Tages durchgehen (standardmäßig werden die Daten alle 5 Minuten erfasst). http://www.atcomputing.nl/Tools/atop/

ScottZ
quelle
6

Ich denke, dass Munin eines der wichtigsten Überwachungsinstrumente ist, mit denen Sie Informationen über die Aktivitäten Ihrer Box erhalten. Es gibt auch einige Befehlszeilentools wie sar , iostat, ps, top für eine solche Verwendung.

Ali Mezgani
quelle
5

Die anderen Antworten haben Ihnen nur gezeigt, wie Sie sehen können, was gerade vor sich geht, was nicht hilft, wenn das System neu gestartet wurde.

Wenn Sie möchten, dass diese Informationen für die Nachwelt erfasst werden (oder für die Abrechnung oder für eine andere Verwendung, die Sie möglicherweise auch haben), ist Prozessabrechnung das, was Sie möchten.

Hier ist ein HOWTO, das ich gefunden habe, aber ich bin ehrlich - es ist ein Jahrzehnt her, seit ich Prozessabrechnung verwendet habe.

http://tldp.org/HOWTO/Process-Accounting/

Rob F
quelle
2

Ein benutzerfreundlicherer Ansatz für die Lösung von shawn zur Echtzeitüberwachung:

while true; do clear; ps -eo pcpu,pmem,pid,user,args --sort=-pcpu c|head -20; sleep 1; done

Dies bietet eine statische Ansicht der 20 wichtigsten Prozesse, die alle 1 Sekunde aktualisiert werden. Die Option "c" im Befehl ps gibt den Namen der ausführbaren Datei des Prozesses und nicht den gesamten Befehl args aus. Sie können diese Option weglassen, wenn Sie stattdessen die gesamten Befehlsinformationen benötigen. Spalte% Speicherauslastung wurde ebenfalls hinzugefügt.

Manolis
quelle
1

Hat Gentoo nicht auch den Befehl "top"?

machine:~/# top

sollte dir die laufenden Statistiken geben, von denen Programme die meiste Last verursachen.

Emthigious
quelle
Ja, ich weiß, aber ich möchte, dass das protokolliert wird, damit ich den Verlauf später sehen kann. Wenn die CPU ausfällt, reagiert der Computer nicht mehr, sodass ich mich nicht einloggen und rennen kann, um topzu sehen, wer der Schuldige ist. Ich möchte später noch einmal nachsehen, welcher Prozess dies getan hat.
Helder S Ribeiro