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.
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.
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
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 von Standard in MySQL
Inhaltsverzeichnis Tutorial-Reihe 1. Einführung i...
FIFO-Kommunikation (First In First Out) FIFO-Name...
Wenn Sie Magento häufig ändern, stoßen Sie möglich...
Ich habe kürzlich an mehreren virtuellen Maschine...
MySQL DDL-Anweisungen Was ist DDL, DML. DDL ist e...
1. Was ist SQL-Injection? SQL-Injection ist eine ...
MySql ist eine Datenquelle, die wir häufig verwen...
In MySQL 8.0.18 wurde eine neue Hash-Join-Funktio...
Wir befinden uns in einer Ära der rasanten Entwick...
Nehmen wir ein Benutzerverwaltungssystem an, bei ...
Inhaltsverzeichnis Vorwort 1. Stildurchdringung 1...
Vorwort Bei der Verwaltung und Wartung des Linux-...
Schauen wir uns zunächst den Code an: ALTER TABLE...
Vorwort Im WeChat-Applet können Sie globalData vo...
Methode 1: Verwenden Sie den Befehl SET PASSWORD ...