Welche Methoden stehen zur Verfügung, um die CPU-Auslastung in der Linux-Befehlszeile abzurufen? [geschlossen]

12

Wir wissen, dass dies topein Befehl ist, um die CPU-Auslastung unter Linux zu ermitteln, und andere Methoden, cat /proc/statdie von top verwendet werden.

Welche anderen Methoden gibt es, um die CPU-Auslastung in der Linux-Befehlszeile abzurufen?

Anwendungsfall: Die Ausgabe dieses Befehls wird von einem Skript verwendet, um die CPU-Auslastung kontinuierlich zu protokollieren. topund /proc/statgeben Sie eine detaillierte Verwendung, die schwer zu protokollieren ist. Gibt es eine einfachere Möglichkeit, die CPU-Informationen abzurufen?

Fasil
quelle
3
Was ist los mit denen, die Sie zitieren?
Pataluc
@pataluc Es gibt detailliertere Informationen. Ich brauche eine Gesamt-CPU-Auslastung sagen CPU verwendet: 91% Mem verwendet: 78% Mem frei: 22% so etwas ..
Fasil
siehe Nathans Antwort ... Sie können seddas Ergebnis sehen, wenn Sie nur den Wert wollen.
Pataluc
Abstimmung zum Abschluss als "nicht konstruktiv". Von superuser.com/help/dont-ask : " Um zu verhindern, dass Ihre Frage markiert und möglicherweise entfernt wird, sollten Sie keine subjektiven Fragen stellen, bei denen ... Ihre Antwort zusammen mit der Frage bereitgestellt wird und Sie weitere Antworten erwarten: 'Ich verwende ______ für ______ , was benutzt du?' "
bwDraco
3
@DragonLord Tatsächlich gibt es nur sehr begrenzte Möglichkeiten, dies zu tun, und die beiden Antworten hier sind tatsächlich nützlich. Meins weist auf ein sehr häufiges Missverständnis hin topund das andere gibt einen sehr nützlichen Befehl. Es ist kein Ich benutze X, wie wäre es mit dir? Frage, aber eine Wie mache ich X Frage. Abstimmung zur Wiedereröffnung.
Terdon

Antworten:

14

Wie andere gesagt haben, ist der beste Weg wahrscheinlich top. Es muss ein wenig optimiert und analysiert werden, aber Sie können es erhalten, um die aktuelle CPU-Auslastung als Prozentsatz anzugeben.

topteilt die CPU-Auslastung zwischen Benutzer, Systemprozessen und niceProzessen auf, wir wollen die Summe der drei. So können wir topim batch-Modus laufen, der es uns ermöglicht, seine Ausgabe zu analysieren. Wie hier erläutert , gibt die erste Iteration von top -bdie Prozentsätze seit dem Start zurück. Daher benötigen wir mindestens zwei Iterationen ( -n 2), um den aktuellen Prozentsatz zu erhalten. Um die dArbeit zu beschleunigen, können Sie die Verzögerung zwischen den Iterationen auf einstellen 0.01. Schließlich geben Sie grepdie Zeile mit den CPU-Prozentsätzen ein und verwenden dann, gawkum Benutzer-, System- und nette Prozesse zu summieren:

    top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'
        -----  ------   -----------    ---------   ----------------------
          |      |           |             |             |------> add the values
          |      |           |             |--> keep only the 2nd iteration
          |      |           |----------------> keep only the CPU use lines
          |      |----------------------------> set the delay between runs
          |-----------------------------------> run twice in batch mode

Ich dachte, Sie könnten diese Informationen auch erhalten, ps -o pcpu axindem Sie die prozentuale Nutzung jedes laufenden Prozesses hinzufügen. Leider wird, wie hier erläutert , ps"der Prozentsatz der Zeit zurückgegeben, die während der gesamten Lebensdauer eines Prozesses ausgeführt wurde", was nicht erforderlich ist.


BEARBEITEN

Basierend auf Ihrem Kommentar unterscheidet sich Ihre Version von topmeiner und Sie sollten diese stattdessen verwenden:

top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'

Um Probleme mit der Lokalisierung zu vermeiden, setzen Sie das Gebietsschema auf C:

LC_ALL=C top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'
Terdon
quelle
Ich habe meine Antwort gelöscht, weil das, was Sie gesagt haben, richtig ist. Dieser scheint eine gültige Methode zu sein.
Nathan C
@ NathanC Ich dachte, deine Antwort war auch richtig, es war das, was ich geantwortet hätte. Dann habe ich es getestet und war überrascht :).
Terdon
@terdon Vielen Dank für Ihre ausführliche Antwort ... Ich konnte die Ausgabe für den obigen Befehl nicht erhalten. Ist eine syntaktische Änderung erforderlich
?
@ Fasil Nein, es sollte funktionieren. Worin besteht das Problem? Irgendwelche Fehlermeldungen?
Terdon
@terdon Ich erhalte keine Ausgabe für den vollständigen Befehl. Mit #top -bn 2 -d 0.01 erhalte ich das vollständige Ergebnis, aber beim Hinzufügen von grep '^% Cpu' sehe ich keine Ausgabe, nur die Eingabeaufforderungen geben no zurück Fehler ...
Fasil
9

sarist der endgültige Weg, um es zu tun. So wird zum Beispiel sar -uso etwas ausgegeben:

08:30:01 AM       CPU     %user     %nice   %system   %iowait     %idle
08:40:01 AM       all      6.94      0.00      1.77      4.92     86.36
08:50:01 AM       all      5.73      0.00      2.31     12.72     79.24
09:00:01 AM       all      5.95      0.00      2.58     18.36     73.11
09:10:01 AM       all      6.88      0.00      2.22     17.44     73.45
09:20:01 AM       all      8.61      0.00      2.68     27.93     60.78

Sie sagen nicht, welches Linux Sie verwenden, aber für CentOS / RedHat müssen Sie das sysstatPaket installieren , und ich denke, dass es unter Debian / Ubuntu dasselbe ist.

Sie können sar auch verwenden, um Statistiken ad hoc zu erfassen :

sar -o /tmp/sar.out 60 600

Sammelt alle 60 Sekunden 600 Mal Statistiken, also 600 Minuten.

Philip Kearns
quelle
1
Sie sollten es wahrscheinlich anders formulieren. Die von Ihnen gepostete Zeile wird alle 60 Sekunden 600 Mal gemessen. Die Art und Weise, wie ich Ihren Beitrag gelesen habe, war, dass der 600 eine Dauer ist. Wenn ich also 30 600 setze, würde es 600 Minuten lang alle 30 Sekunden dauern, tatsächlich würde es 600 Mal alle 30 Sekunden dauern.
James McDonnell