Detaillierte Erklärung der Top-Befehlsausgabe in Linux

Detaillierte Erklärung der Top-Befehlsausgabe in Linux

Vorwort

Ich glaube, jeder hat den Befehl top unter Linux verwendet. Seitdem ich mit Linux in Berührung gekommen bin, verwende ich top, um die CPU- und MEM-Rangfolge von Prozessen anzuzeigen. Aber ich verstehe die anderen Ausgabeergebnisse des Top-Befehls nicht. Was stellen diese Indikatoren dar und unter welchen Umständen sollte ich auf sie achten? Was sind die Quelldaten der Ausgabeergebnisse des Top-Befehls und was ist das Berechnungsprinzip?

Demo-Umgebung

# uname -a
Linux VM_1_11_centos 3.10.0-693.el7.x86_64 #1 SMP Dienstag, 22. August 2017, 21:09:27 UTC x86_64 x86_64 x86_64 GNU/Linux

top-Befehl

Der Befehl top ist ein häufig verwendetes Leistungsanalysetool unter Linux. Es kann die Systemressourcennutzung und die Ressourcennutzung verschiedener Prozesse in Echtzeit anzeigen (standardmäßig alle 3 Sekunden aktualisiert), ähnlich dem Windows Task-Manager.

oben – 11:00:54, 54 Tage, 23:35, 6 Benutzer, durchschnittliche Auslastung: 16,32, 18,75, 21,04
Aufgaben: 209 insgesamt, 3 laufend, 205 schlafend, 0 angehalten, 1 Zombie
% CPU(s): 29,7 us, 18,9 sy, 0,0 ni, 49,3 id, 1,7 wa, 0,0 hi, 0,4 si, 0,0 st
KiB-Speicher: 32781216 gesamt, 1506220 frei, 6525496 verwendet, 24749500 Buff/Cache
KiB-Austausch: 0 insgesamt, 0 frei, 0 verwendet. 25607592 verfügbare Mem 

 PID USER PR NI VIRT RES SHR S %CPU %MEM ZEIT+ BEFEHL                                                                                 
Wurzel 20 0 15,6 g 461676 4704 R 198,0 1,4 11:15,26 Python                                                                                  
Wurzel 20 0 9725596 240028 4672 R 113,0 0,7 7:48,49 Python                                                                                  
Wurzel 20 0 6878028 143196 4720 S 82,4 0,4 ​​1:35,03 Python

Die erste Datenzeile entspricht der Ausgabe des Uptime-Befehls. 11:00:54 ist die aktuelle Uhrzeit, 54 Tage her, 23:55 ist die Zeit, die das System läuft, 6 Benutzer bedeutet, dass aktuell 6 Benutzer angemeldet sind, Durchschnittslast: 16,32, 18,75, 21,04 stellen jeweils die durchschnittliche Systemlast von einer Minute, durchschnittliche Auslastung von fünf Minuten und durchschnittliche Auslastung von 15 Minuten dar.

Durchschnittliche Auslastung

Die durchschnittliche Auslastung gibt die durchschnittliche Anzahl aktiver Prozesse an, einschließlich der Anzahl laufender Prozesse, der Anzahl ausführungsbereiter Prozesse (Bereitschaftszustand) und der Anzahl von Prozessen im unterbrechungsfreien Ruhezustand. Wenn die durchschnittliche Auslastungszahl genau der Anzahl der CPU-Kerne entspricht, beweist dies, dass jeder Kern gut genutzt werden kann. Wenn die durchschnittliche Auslastungszahl größer als die Anzahl der Kerne ist, beweist dies, dass sich das System in einem überlasteten Zustand befindet. Es wird normalerweise davon ausgegangen, dass mehr als 70 % der Anzahl der Kerne stark überlastet sind und Aufmerksamkeit erfordern. Um den Lasttrend zu erkennen, müssen außerdem die 1-Minuten-Durchschnittslast, die 5-Minuten-Durchschnittslast und die 15-Minuten-Durchschnittslast kombiniert werden. Wenn die 1-Minuten-Last relativ hoch ist und die 5-Minuten- und 15-Minuten-Durchschnittslast beide relativ niedrig sind, deutet dies auf einen momentanen Anstieg hin und muss beobachtet werden. Wenn alle drei Werte sehr hoch sind, müssen Sie darauf achten, ob ein Prozess die CPU stark beansprucht oder häufige E/A-Vorgänge durchführt. Dies kann auch daran liegen, dass im System zu viele Prozesse ausgeführt werden und häufig zwischen Prozessen gewechselt wird. Beispielsweise handelt es sich bei der obigen Demonstrationsumgebung um eine 8-Core-CentOS-Maschine, was beweist, dass das System über einen langen Zeitraum in einem überlasteten Zustand läuft.

Aufgaben: 214 insgesamt, 4 laufend, 209 schlafend, 0 angehalten, 1 Zombie

Die Aufgabeninformationen in der zweiten Zeile zeigen die Gesamtzahl und den Status der im System laufenden Prozesse. 214 insgesamt bedeutet, dass sich derzeit 214 Benutzerprozesse im System befinden, 4 läuft bedeutet, dass sich 4 Prozesse im laufenden Zustand befinden, 209 schläft bedeutet, dass sich 209 Prozesse im schlafenden Zustand befinden, 0 gestoppt bedeutet, dass sich 0 Prozesse im gestoppten Zustand befinden und 1 Zombie bedeutet, dass es 1 Zombieprozess gibt.

Zombie-Prozesse

Wenn der untergeordnete Prozess endet und der übergeordnete Prozess nicht wait()/waitpid() aufruft, um auf die Beendigung des untergeordneten Prozesses zu warten, wird ein Zombie-Prozess generiert. Der Grund dafür ist, dass der untergeordnete Prozess nicht wirklich beendet wird, wenn er endet, sondern eine Zombie-Prozessdatenstruktur in der Systemprozesstabelle hinterlässt, die darauf wartet, dass der übergeordnete Prozess aufräumt. Wenn der übergeordnete Prozess beendet wurde, übernimmt der Init-Prozess die Arbeit des übergeordneten Prozesses, um ihn zu verarbeiten (die Leiche einzusammeln). Daraus lässt sich erkennen, dass es eine große Anzahl von Zombieprozessen gibt, wenn der übergeordnete Prozess nichts tut und nicht beendet wird. Jeder Zombieprozess belegt einen Platz in der Prozesstabelle. Wenn es zu viele Zombieprozesse gibt, kann das System keine neuen Prozesse erstellen, da die Kapazität der Prozesstabelle begrenzt ist. Wenn der Zombie-Indikator zu groß ist, müssen wir daher darauf achten. Die Spalte S in den folgenden detaillierten Prozessinformationen stellt den Ausführungsstatus des Prozesses dar, und Z bedeutet, dass der Prozess ein Zombieprozess ist.

So beseitigen Sie Zombie-Prozesse:

1. Suchen Sie die PID des übergeordneten Prozesses des Zombie-Prozesses (pstress kann die Eltern-Kind-Beziehung des Prozesses anzeigen), kill -9 pid und init bereinigt den Zombie-Prozess automatisch, nachdem der übergeordnete Prozess beendet wurde. (Beachten Sie, dass kill -9 keine Zombie-Prozesse beendet)

2. Starten Sie das System neu.

% CPU(s): 31,9 us, 30,3 sy, 0,0 ni, 37,0 id, 0,0 wa, 0,0 hi, 0,8 si, 0,0 st

Der Wert in %Cpu(s) in der dritten Zeile gibt die gesamte CPU-Auslastung an.

  • us user gibt das CPU-Zeitverhältnis im Benutzermodus an
  • sy system gibt den Anteil der CPU-Zeit im Kernelmodus an
  • ni nice gibt den Anteil der CPU-Zeit an, der für die Ausführung von Prozessen mit niedriger Priorität aufgewendet wird.
  • id idle gibt das Verhältnis der Leerlaufzeit der CPU an
  • wa iowait gibt den Anteil der CPU-Zeit beim IO-Warten an
  • hi hard interrupt gibt den Anteil der CPU-Zeit an, der für die Verarbeitung von Hard Interrupts verwendet wird
  • si Soft Interrupt gibt den Anteil der CPU-Zeit an, der für die Verarbeitung von Soft Interrupts aufgewendet wird
  • „st steal“ gibt den Anteil der CPU-Zeit an, der von anderen virtuellen Maschinen belegt wird, wenn das aktuelle System in der virtuellen Maschine ausgeführt wird.

Die gesamte CPU-Auslastung beträgt also 1-ID. Wenn us sehr hoch ist, beweist dies, dass die CPU-Zeit hauptsächlich für den Benutzercode verwendet wird und der Benutzercode optimiert werden muss. Wenn sy sehr hoch ist, bedeutet dies, dass die CPU-Zeit im Kernel verbraucht wird, entweder durch häufige Systemaufrufe oder häufiges CPU-Umschalten (Prozesswechsel/Thread-Umschalten). Wenn wa sehr hoch ist, bedeutet dies, dass ein Prozess häufige E/A-Vorgänge ausführt, wobei es sich um Festplatten-E/A oder Netzwerk-E/A handeln kann. Wenn si sehr hoch ist, bedeutet dies, dass die CPU-Zeit für die Verarbeitung von Soft-Interrupts verbraucht wird. Der Empfang und die Übertragung von Netzwerkpaketen löst Soft-Interrupts des Systems aus, sodass eine große Anzahl kleiner Netzwerkpakete häufig Soft-Interrupts auslöst. Ein typischer SYN-Floor führt dazu, dass si sehr hoch ist.

KiB-Speicher: 32781216 gesamt, 663440 frei, 7354900 verwendet, 24762876 Buff/Cache
KiB-Austausch: 0 insgesamt, 0 frei, 0 verwendet. 24771700 verfügbare Mem

Die 4. und 5. Zeile zeigen die Systemspeichernutzung. Die Einheit ist KiB. totol steht für den Gesamtspeicher, free für den ungenutzten Inhalt und used für den genutzten Speicher. „Buff“ gibt den Speicher an, der zum Lesen und Schreiben des Festplattencaches verwendet wird, und „Cache“ gibt den Speicher an, der zum Lesen und Schreiben des Dateicaches verwendet wird. „avail“ gibt den verfügbaren Anwendungsspeicher an.

Das Swap-Prinzip besteht darin, einen Teil des Speicherplatzes oder eine lokale Datei als Speicher zu verwenden. „Swap-Gesamt“ gibt den gesamten verfügbaren Swap-Betrag an, „Freier Swap“ den verbleibenden Betrag und „Verwendeter Swap“ den bereits verwendeten Betrag. Wenn alle drei Werte 0 sind, bedeutet dies, dass die Swap-Funktion des Systems deaktiviert ist. Da es sich bei der Demonstrationsumgebung um eine virtuelle Maschine handelt, ist die Swap-Funktion der virtuellen Maschine im Allgemeinen deaktiviert.

Ab der sechsten Zeile wird der konkrete Status jedes Prozesses angezeigt:

PID USER PR NI VIRT RES SHR S %CPU %MEM ZEIT+ BEFEHL
  • PID-Prozess-ID
  • USER Benutzername des Prozessbesitzers, z. B. root
  • Priorität der PR-Prozessplanung
  • NI-Prozess Nice-Wert (Priorität), je kleiner der Wert, desto höher die Priorität
  • VIRT Vom Prozess verwendeter virtueller Speicher
  • RES Vom Prozess genutzter physischer Speicher (ausgenommen gemeinsam genutzter Speicher)
  • Vom SHR-Prozess verwendeter gemeinsam genutzter Speicher
  • CPU Der Prozentsatz der vom Prozess genutzten CPU
  • MEM Der vom Prozess verwendete Arbeitsspeicher in Prozent
  • ZEIT Die gesamte CPU-Zeit, die der Prozess seit seinem Start verbraucht hat
  • COMMAND Der Startbefehl des Prozesses (standardmäßig wird nur Binär angezeigt, top -c kann die Befehlszeile und die Startparameter anzeigen)

Berechnungsprinzip

Bevor die Berechnungsprinzipien verschiedener Indikatoren des Top-Befehls vorgestellt werden, müssen wir zunächst das Proc-Dateisystem unter Linux vorstellen, da die Daten des Top-Befehls aus dem Proc-Dateisystem stammen. Das Proc-Dateisystem ist ein virtuelles Dateisystem und eine Kommunikationsmethode zwischen dem Linux-Kernel und dem Benutzer. Der Linux-Kernel teilt dem Benutzer über das Proc-Dateisystem den aktuellen Status des Kernels mit, und der Benutzer kann durch Schreiben von Proc auch einige Verhaltensweisen des Kernels festlegen. Im Gegensatz zu normalen Dateien werden diese Proc-Dateien dynamisch erstellt und geändert, da sich der Status des Kernels ständig ändert.

Die von top angezeigten CPU-Indikatoren werden alle aus den Informationen der Datei /proc/stat abgeleitet:

# Katze /proc/stat 
Zentralprozessor 1151829380 20277 540128095 1909004524 21051740 0 10957596 0 0 0
cpu0 143829475 3918 67658924 235696976 5168514 0 1475030 0 0 0
cpu1 144407338 1966 67616825 236756510 3969110 0 1392212 0 0 0
cpu2 144531920 2287 67567520 238021699 2713175 0 1363460 0 0 0
cpu3 143288938 2366 67474485 239715220 2223739 0 1356698 0 0 0
cpu4 143975390 3159 67394206 239494900 1948424 0 1343261 0 0 0
cpu5 144130685 2212 67538520 239431294 1780756 0 1349882 0 0 0
cpu6 144009592 2175 67536945 239683876 1668203 0 1340087 0 0 0
cpu7 143656038 2193 67340668 240204045 1579816 0 1336963 0 0 0

Die erste Zeile stellt die gesamten CPU-Informationen dar, gefolgt von detaillierten Informationen zu jeder CPU.

Aber welche Informationen stehen in diesen speziellen Spalten? Die Antwort finden wir mit man proc:

Benutzer (1) Zeit, die im Benutzermodus verbracht wurde.

nett (2) Zeit, die im Benutzermodus mit niedriger Priorität (nett) verbracht wurde.

system (3) Im Systemmodus verbrachte Zeit.

idle (4) Zeit, die im Leerlauf verbracht wurde. Dieser Wert sollte USER_HZ mal dem zweiten Eintrag im
      /proc/uptime-Pseudodatei.
iowait (seit Linux 2.5.41)

     (5) Wartezeit bis zum Abschluss der E/A.

irq (seit Linux 2.6.0-test4)
     (6) Zeit für die Bearbeitung von Interrupts.

Softirq (seit Linux 2.6.0-test4)
     (7) Zeit für die Wartung von Softirqs.

stehlen (seit Linux 2.6.11)
     (8) Gestohlene Zeit, d. h. die Zeit, die in anderen Betriebssystemen beim Ausführen in einem virtuellen
         isierte Umgebung

Gast (seit Linux 2.6.24)
     (9) Zeit, die für den Betrieb einer virtuellen CPU für Gastbetriebssysteme unter der Kontrolle des Linux-Kernels aufgewendet wurde.

guest_nice (seit Linux 2.6.33)
      (10) Zeitaufwand für den Betrieb eines Gastbetriebssystems (virtuelle CPU für Gastbetriebssysteme unter der Kontrolle
         Steuerung des Linux-Kernels).

Das heißt, beginnend mit der zweiten Spalte handelt es sich um die CPU-Zeit von Benutzer, Nice, System, Leerlauf, Iowait, IRQ (Hard Interrupt), SoftIRQ (Soft Interrupt), Steal, Gast und Guest_Nice, und die Einheit beträgt normalerweise 10 ms. Wie wird also der Anteil an der Spitze berechnet?

Da die CPU-Zeit ein kumulativer Wert ist, benötigen wir eine Zeitspannendifferenz, um die aktuelle CPU-Situation widerzuspiegeln. Die Standardzeitspanne für top beträgt 3 s. Nehmen wir zum Beispiel einen Benutzerwert user1 und die aktuelle Gesamt-CPU-Zeit total1

Unter diesen ist die Gesamtsumme gleich der Summe der oben genannten Elemente, d. h. Gesamtsumme = Benutzer+Nice+System+Idle+Iowait+IRQ+Softirq+Steal+Guest+Guest_Nice. Nach 3 Sekunden werden ein weiterer Benutzerwert user2 und ein Gesamtbetrag total2 abgerufen.

Dann ist die durchschnittliche CPU-Auslastung des Benutzers in diesen 3 Sekunden gleich ((Benutzer2-Benutzer1)/(Gesamt2-Gesamt1))/3 * 100 %. Darüber hinaus ist die Berechnungsmethode für jede spezifische CPU ähnlich.

Die wichtigsten speicherbezogenen Indikatoren lesen direkt die entsprechenden Felder der Datei /proc/meminfo:

# Katze /proc/meminfo 
SpeicherGesamt: 32781216 kB
Speicherfrei: 1043556 kB
SpeicherVerfügbar: 25108920 kB
Puffer: 427516 kB
Zwischengespeichert: 22084612 kB
SwapCached: 0 kB
Aktiv: 18640888 kB
Inaktiv: 10534920 kB
Aktiv (anonym): 6664480 kB
Inaktiv (anonym): 412 kB
Aktiv (Datei): 11976408 kB
Inaktiv(Datei): 10534508 kB
Nicht auslagerbar: 4 kB
Gesperrt: 4 kB
SwapGesamt: 0 kB
SwapFree: 0 kB
Schmutzig: 1092 kB
Rückschreiben: 0 kB
AnonSeiten: 6663764 kB
Kartiert: 347808 kB
Bild: 1212 kB
Platte: 2201292 kB
SWiederherstellbar: 1957344 kB
SUnreclaim: 243948 kB
KernelStack: 73392 kB
Seitentabellen: 57300 kB
NFS_Unstable: 0 kB
Absprung: 0 kB
WritebackTmp: 0 kB
CommitLimit: 16390608 kB
Committed_AS: 42170784 kB
VmallocGesamt: 34359738367 kB
VmallocVerwendet: 61924 kB
VmallocChunk: 34359625048 kB
Hardware beschädigt: 0 kB
AnonHugePages: 364544 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Riesige Seitengröße: 2048 kB
DirectMap4k: 376680 kB
DirectMap2M: 26886144 kB
DirectMap1G: 8388608 kB

Darunter entspricht „total“ „MemTotal“, „free“ „MemFree“ und „avail“ „MemAailable“.

Zusammenfassen

Der Artikel beginnt mit der Ausgabe des Top-Befehls, erklärt, welche abnormalen Werte der Indikatoren unsere Aufmerksamkeit erfordern, und stellt schließlich das CPU-Berechnungsprinzip des Top-Befehls und die Datenquelle von Mem vor.

Das ist alles für diesen Artikel. Ich hoffe, dass der Inhalt dieses Artikels für Ihr Studium oder Ihre Arbeit von gewissem Referenzwert ist. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung zur Verwendung des Linux-Top-Befehls
  • Detaillierte Erklärung des Linux-Top-Befehls und seiner Ausgabeergebnisse
  • Detaillierte Erklärung des Linux-Top-Befehls
  • Detaillierte Erklärung des Top-Befehls in Linux
  • Tipps zur Verwendung des Top-Befehls in Linux

<<:  Detaillierte Erklärung zur Verwendung von Standard in MySQL

>>:  React Native meldet den Fehler „Ein Parameter vom Typ ‚NSArray<id<RCTBridgeModule>> kann nicht initialisiert werden“ (Lösung)

Artikel empfehlen

MySQL Serie 3 Grundlagen

Inhaltsverzeichnis Tutorial-Reihe 1. Einführung i...

Implementierung von FIFO in der Linux-Prozesskommunikation

FIFO-Kommunikation (First In First Out) FIFO-Name...

Grundlegende Anweisungen der MySQL-Datendefinitionssprache DDL

MySQL DDL-Anweisungen Was ist DDL, DML. DDL ist e...

Ein genauerer Blick auf SQL-Injection

1. Was ist SQL-Injection? SQL-Injection ist eine ...

So verwenden Sie Navicat zum Exportieren und Importieren einer MySQL-Datenbank

MySql ist eine Datenquelle, die wir häufig verwen...

Mobiles Internet-Zeitalter: Responsive Webdesign ist zum allgemeinen Trend geworden

Wir befinden uns in einer Ära der rasanten Entwick...

Einige Tipps zur Verwendung von Less in Vue-Projekten

Inhaltsverzeichnis Vorwort 1. Stildurchdringung 1...

15 Linux-Befehlsaliase, die Ihnen Zeit sparen

Vorwort Bei der Verwaltung und Wartung des Linux-...

Der Unterschied zwischen Schlüssel und Index in MySQL

Schauen wir uns zunächst den Code an: ALTER TABLE...

Ausführliche Erläuterung des globalen Status des WeChat-Applets

Vorwort Im WeChat-Applet können Sie globalData vo...