wake-up-neo.com

So erhalten Sie die CPU-Auslastung (z. B. 57%) unter Linux

Ich frage mich, wie Sie die CPU-Auslastung des Systems ermitteln und beispielsweise mit bash in Prozent darstellen können.

Beispielausgabe:

57%

Wenn es mehr als einen Kern gibt, wäre es schön, wenn ein durchschnittlicher Prozentsatz berechnet werden könnte.

171
user1199739

Schauen Sie sich cat /proc/stat An

grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage "%"}'

EDIT Bitte lesen Sie die Kommentare, bevor Sie diese kopieren, einfügen oder für ernsthafte Arbeiten verwenden. Dies wurde weder getestet noch verwendet. Es ist eine Idee für Benutzer, die kein Hilfsprogramm installieren möchten oder für etwas, das in einer beliebigen Distribution funktioniert. Manche Leute denken, man kann alles "passend installieren".

HINWEIS: Dies ist nicht die aktuelle CPU-Auslastung, sondern die gesamte CPU-Auslastung in allen Kernen seit dem Systemstart. Dies kann sich stark von der aktuellen CPU-Auslastung unterscheiden. Um den aktuellen Wert zu erhalten, muss top (oder ein ähnliches Tool) verwendet werden.

152
vimdude

Du kannst es versuchen:

top -bn1 | grep "Cpu(s)" | \
           sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
           awk '{print 100 - $1"%"}'
95
netcoder

Probieren Sie mpstat aus dem Paket sysstat

> Sudo apt-get install sysstat
Linux 3.0.0-13-generic (ws025)  02/10/2012  _x86_64_    (2 CPU)  

03:33:26 PM  CPU    %usr   %Nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
03:33:26 PM  all    2.39    0.04    0.19    0.34    0.00    0.01    0.00    0.00   97.03

Dann einige cutoder grep, um die benötigten Informationen zu analysieren:

mpstat | grep -A 5 "%idle" | tail -n 1 | awk -F " " '{print 100 -  $ 12}'a
37
Peter Svensson

Könnte auch eine tatsächliche Antwort mit meiner Lösung geben, die von Peter Liljenbergs inspiriert wurde:

$ mpstat | awk '$12 ~ /[0-9.]+/ { print 100 - $12"%" }'
0.75%

Dies verwendet awk, um 100 abzüglich des 12. Feldes (Leerlauf) mit einem Prozentzeichen danach auszudrucken. awk tut dies nur für eine Zeile, in der das 12. Feld nur Zahlen und Punkte enthält ($12 ~ /[0-9]+/).

20
Dan Fego

BEARBEITET: Mir ist aufgefallen, dass in der Antwort eines anderen Benutzers% idle Feld 12 anstelle von Feld 11 war. Die awk wurde aktualisiert, um zu berücksichtigen, dass das Feld% idle variabel ist.

Dies sollte Ihnen die gewünschte Ausgabe bringen:

mpstat | awk '$3 ~ /CPU/ { for(i=1;i<=NF;i++) { if ($i ~ /%idle/) field=i } } $3 ~ /all/ { print 100 - $field }'

Wenn Sie eine einfache Ganzzahlrundung wünschen, können Sie printf verwenden:

mpstat | awk '$3 ~ /CPU/ { for(i=1;i<=NF;i++) { if ($i ~ /%idle/) field=i } } $3 ~ /all/ { printf("%d%%",100 - $field) }'
13
jordanm