Einführung

Unzureichende Systemressourcen wie Speicher, Arbeitsspeicher und CPU (Central Processing Unit) können die Leistung einer Anwendung stark beeinträchtigen. Daher ist die Überwachung dieser Komponenten von entscheidender Bedeutung.

Im Gegensatz zu Festplatte und Speicher ist die Überwachung der CPU-Auslastung auf einem Linux-System nicht so einfach. In diesem Artikel erfahren Sie, wie Sie CPU-Metriken interpretieren und in einem für Menschen lesbaren Format anzeigen.

CPU-Auslastung vs. CPU-Auslastung

Obwohl CPU-Auslastung und CPU-Auslastung ähnlich klingen, sind sie nicht austauschbar. Die CPU-Auslastung ist definiert als die Anzahl der Prozesse, die zu einem bestimmten Zeitpunkt einen Kern verwenden oder darauf warten, ihn zu verwenden.

Nehmen wir an, wir haben ein Single-Core-System und unsere CPU-Auslastung liegt im Durchschnitt immer unter 0,6. Dies zeigt an, dass jeder Prozess, der die CPU verwenden muss, diese sofort verwenden kann, ohne zu warten. Wenn der CPU-Lastdurchschnitt über 1 liegt, bedeutet dies, dass Prozesse vorhanden sind, die die CPU verwenden müssen, dies jedoch derzeit aufgrund der Nichtverfügbarkeit der CPU nicht können.

Der Lastdurchschnitt über 1 in einem Multiprozessorsystem ist jedoch kein Problem, da mehr Kerne verfügbar sind.

Der Befehl uptime gibt uns eine Ansicht des Lastdurchschnitts in Intervallen von 1, 5 und 15 Minuten:

 ~]# uptime 12:40:05 up 2:29, 1 user, load average: 0.37, 0.08, 0.03

Die Interpretation des Lastdurchschnitts kann nicht durchgeführt werden, ohne die Anzahl der Kerne eines Systems zu kennen:

 ~]# cat /proc/cpuinfo |grep corecore id: 0cpu cores: 1

Andererseits ist die CPU-Auslastung der Prozentsatz der Zeit, die eine CPU benötigt, um nicht im Leerlauf befindliche Aufgaben zu verarbeiten. Die CPU-Auslastung kann nur über einen bestimmten Zeitraum gemessen werden. Wir können die CPU-Auslastung bestimmen, indem wir den Prozentsatz der im Leerlauf verbrachten Zeit von 100 subtrahieren.

Berechnung der CPU-Auslastung

3.1. Abrufen der CPU-Auslastung mit vmstat

Der Befehl vmstat zeigt die CPU-Aktivität nahezu in Echtzeit an:

 ~]# vmstat 3 4procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 4 0 0 1347080 6120 941464 0 0 68 11 72 137 1 2 97 0 0 1 0 0 1347080 6120 941464 0 0 0 0 84 157 1 2 97 0 0 1 0 0 1347080 6120 941464 0 0 0 0 59 107 1 1 98 0 0 1 0 0 1347080 6120 941464 0 0 0 1 59 104 1 1 98 0 0

Die Spalten unter CPU geben einen Überblick darüber, wo die Prozessorzeit aufgewendet wird:

  • us – Zeit für die Ausführung von Nicht–Kernel–Code
  • sy – Zeit für die Ausführung von Kernel–Code
  • id – Zeit für den Leerlauf
  • wa – Zeit für das Warten auf E / A
  • st – Zeit wird von einer virtuellen Maschine gestohlen

Die ID-Spalte interessiert uns. Mit einer Verzögerung von einer Sekunde berechnen wir die CPU-Auslastung mit vmstat:

 ~]# echo "CPU Usage: "$"%"CPU Usage: 2%

Der Befehl vmstat ohne Argumente gibt die CPU-Zeiten seit dem Booten an. Dies liefert keinen genauen Prozentsatz der CPU-Auslastung. Daher können die Argumente nur 1 und 2 sein, wenn wir die nach einer Sekunde berechneten Metriken verwenden:

vmstat 1 2

3.2. Abrufen der CPU-Auslastung mit /proc/stat

Die CPU-Aktivität kann auch aus der Datei /proc/stat extrahiert werden. Die Datei enthält verschiedene Metriken über das System seit dem Booten:

 ~]# cat /proc/stat cpu 3020 28 1863 22404 35 432 47 0 0 0cpu0 3020 28 1863 22404 35 432 47 0 0 0intr 96468 28 100 0 0 0 0 0 0 1 0 0 0 1263 0 0 0 3696 0 153 928 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 207 0 41 14600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 343 97 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0ctxt 340950btime 1628404433processes 3276procs_running 2procs_blocked 0softirq 112867 1 16857 56 269 510 0 261 0 0 94913

Die erste Zeile, ‚cpu‘ ist ein Aggregat der Metriken aller Kerne des Systems. Auf einem System mit 4 Kernen gäbe es 4 CPU—Leitungen – cpu0, cpu1, cpu2 und cpu3. Die Spalten in der Zeile ‚cpu‘ stellen die Zeit dar, die für die Verarbeitung verschiedener Aufgaben aufgewendet wurde:

  • Benutzerzeit im Benutzermodus
  • nice – Zeit für die Verarbeitung von Nice–Prozessen im Benutzermodus
  • Systemzeit für die Ausführung von Kernelcode
  • idle – Zeit im Leerlauf
  • iowait – Zeit für das Warten auf E / A
  • irq – Zeit für die Wartung von Interrupts
  • softirq – Zeitaufwand für die Wartung von Software–Interrupts
  • stehlen – Zeit, die von einer virtuellen Maschine gestohlen wurde
  • Gast – Zeitaufwand für die Ausführung einer virtuellen CPU für ein Gastbetriebssystem
  • guest_nice – Zeitaufwand für die Ausführung einer virtuellen CPU für einen „nizierten“ Gast betriebssystem

Wir werden diese Metriken verwenden, um den durchschnittlichen Leerlaufprozentsatz zu berechnen. Anschließend verwenden wir den berechneten Wert, um die CPU-Auslastung zu ermitteln. Es ist wichtig zu beachten, dass ältere Linux-Distributionen die Metriken steal, guest oder guest_nice nicht berechnen. Wenn wir ein älteres System verwenden würden, würden wir diese Metriken in unserer Berechnung weglassen:

Durchschnittliche Leerlaufzeit (%) = (idle * 100) / (user + nice + system + idle + iowait + irq + softirq + steal + guest + guest_nice)

cat /proc/stat |grep cpu |tail -1|awk '{print (*100)/(++++++++)}'|awk '{print "CPU Usage: " 100-}'CPU Usage: 2.4219

Da wir an einem Single-Core-System arbeiten, ist die Zeile ‚cpu‘ dieselbe wie ‚cpu1‘. Daher besteht die Verwendung von tail -1 darin, nur eine der Zeilen abzurufen. Wir würden jedoch die ‚CPU‘ -Zeile auf einem Multiprozessorsystem verwenden, da es sich um ein Aggregat von Metriken auf allen Kernen handelt.

3.3. Abrufen der CPU-Auslastung mit top

Im Allgemeinen wird der Befehl top normalerweise verwendet, um aktive Prozesse auf einem System anzuzeigen und wie viel Ressourcen die Prozesse verbrauchen. Trotzdem können wir diesen Befehl verwenden, um den Zustand der CPU zu messen:

 ~]# toptop - 07:08:31 up 2:41, 1 user, load average: 0.00, 0.00, 0.00Tasks: 322 total, 2 running, 320 sleeping, 0 stopped, 0 zombie%Cpu(s): 10.0 us, 15.0 sy, 0.0 ni, 97.8 id, 0.0 wa, 5.0 hi, 0.0 si, 0.0 stMiB Mem : 3709.4 total, 1483.1 free, 1402.0 used, 824.4 buff/cacheMiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 2053.4 avail Mem 

Darüber hinaus ist es wichtig zu beachten, dass der Befehl top den CPU-Prozentsatz eines einzelnen Kerns anzeigt. In einem Multiprozessorsystem ist es möglich, dass der CPU-Prozentsatz 100% überschreitet. Wenn beispielsweise 4 Kerne bei 75% sind, zeigt der Befehl top die CPU als 300% an.

Wir müssen den Wert der im Leerlauf verbrachten Zeit ermitteln, damit wir ihn von 100 subtrahieren können, um die Verwendung zu erhalten:

 ~]# top -bn2 | grep '%Cpu' | tail -1 | grep -P '(....|...) id,'|awk '{print "CPU Usage: " 100- "%"}'CPU Usage: 2.2%

Die Option -n gibt die Anzahl der Iterationen an, die der oberste Befehl vor dem Beenden verwenden soll. Wir vermeiden die Verwendung der ersten Schleife, da die Metriken, die wir abrufen, Werte seit dem Booten sind. Daher haben wir die zweite Iteration genommen.

Alternativ müssten wir in einem Multiprozessorsystem den angegebenen ‚id‘-Wert durch die Anzahl der Kerne dividieren und den Wert von 100 subtrahieren. Wenn wir beispielsweise auf einem Quad-Core-System arbeiten und der ‚id‘-Wert 304% beträgt, berechnen wir unsere CPU-Auslastung wie folgt:

CPU-Auslastung % = 100 – (304/4)

 ~]# top -bn2 | grep '%Cpu' | tail -1 | grep -P '(....|...) id,'|awk '{print "CPU Usage: " 100-(/4) "%"}'

Fazit

In diesem Artikel haben wir den Unterschied zwischen CPU-Auslastung und CPU-Auslastung diskutiert. Viele verwenden diese beiden Konzepte synonym, was falsch ist. Danach haben wir uns mit den verschiedenen Methoden zum Abrufen von CPU-Auslastungsmetriken befasst.

Wir haben auch darauf hingewiesen, was für eine bessere Genauigkeit zu vermeiden ist.

Wenn Sie ein paar Jahre Erfahrung im Linux-Ökosystem haben und diese Erfahrung mit der Community teilen möchten, werfen Sie einen Blick auf unsere Beitragsrichtlinien.

Leave a comment

Deine E-Mail-Adresse wird nicht veröffentlicht.