Der Inhalt dieses Artikels ist eine detaillierte Erklärung des Problems der durchschnittlichen Linux-Last. Ich hoffe, dass er für Freunde hilfreich ist.
In einem Interview stellte der Interviewer eine Frage: Die CPU-Auslastung ist nicht hoch, aber die Auslastung (durchschnittliche Auslastung) ist sehr hoch.
Ich verstand damals die Bedeutung von Load nicht. Der Interviewer erklärte, dass dieser Indikator mehr Prozesse in einem unterbrechungsfreien Zustand widerspiegelt. Basierend auf meiner bisherigen Back-End-Entwicklungserfahrung habe ich geantwortet, dass es möglicherweise zu mehr Io-Blockierungen im System kommt, was hauptsächlich bei Netzwerk-Io-Problemen auftritt. Verwenden Sie den Befehl netstat -tnp, um zu sehen, ob in der TCP-Verbindung viel time_wait-Status vorhanden ist. ..
Ich weiß, dass meine Antwort sehr einseitig war, also habe ich sie noch einmal überprüft und mir anschließend Notizen gemacht.
Was ist der Lastdurchschnitt?
Wer mit Linux vertraut ist, weiß, dass Sie den Top-Uptime-Befehl verwenden können, um den Lastdurchschnittsindikator anzuzeigen.
Verwenden Sie die Betriebszeit von man, um den Lastdurchschnitt anzuzeigen. Erläuterung:
Der Systemlastdurchschnitt ist die durchschnittliche Anzahl von Prozessen, die sich entweder in einem ausführbaren oder unterbrechungsfreien Zustand befinden CPU oder wartet auf die Nutzung der CPU. Ein Prozess wartet auf einen E/A-Zugriff, z. B. auf die Festplatte. Die Durchschnittswerte werden nicht für die Anzahl der CPUs in einem System ermittelt , ein Auslastungsdurchschnitt von 1 bedeutet also, dass ein einzelnes CPU-System die ganze Zeit ausgelastet ist, während es auf einem 4-CPU-System bedeutet, dass es 75 % der Zeit im Leerlauf war.
Verstehen Sie den entscheidenden Punkt, auf den sich die durchschnittliche Auslastung bezieht Die Einheit Innerhalb eines bestimmten Zeitraums wird die durchschnittliche Anzahl der Prozesse im System, die sich im „ausführbaren Zustand“ und im „unterbrechungsfreien Zustand“ befinden, als durchschnittliche Anzahl aktiver Prozesse bezeichnet. Es ist erwähnenswert, dass es nicht direkt mit der CPU-Auslastung zusammenhängt.
Verwenden Sie den Befehl ps aux, um den Statusstatus des Prozesses anzuzeigen, wie in diesem Artikel beschrieben:
R-Status, ausführbarer Status (Running / Runnable), der D-Status des Prozesses, der die CPU nutzt oder auf die CPU wartet, der unterbrechungsfreie Status (Uninterrupttitle Sleep, auch Disk Sleep genannt), der Prozess, der sich im kritischen Prozess des Kernel-Status befindet, und ist unterbrechungsfrei.
Warum kann der D-Status nicht unterbrochen werden? Um die Konsistenz der Daten sicherzustellen, ruft das System beispielsweise die E/A-Antwort des Hardwaregeräts auf. Es kann keine anderen Prozesse unterbrechen oder Interrupts werden unterbrochen, was leicht zu Inkonsistenzen zwischen Festplattendaten und Prozessdaten führen kann. Daher ist der unterbrechungsfreie (D) Zustand ein Schutzmechanismus des Systems für Prozesse und Hardwaregeräte.
Die durchschnittliche Anzahl aktiver Prozesse ist streng genommen der exponentiell abnehmende Durchschnitt der Anzahl aktiver Prozesse (die Abnahmerate einer bestimmten Menge ist proportional zu ihrem Wert). Normalerweise kann darunter die Anzahl aktiver Prozesse pro Zeiteinheit verstanden werden.
CPU-Auslastung und ausgeglichene Last
Aus CPU-Sicht spiegelt der Lastdurchschnitt nur die Anzahl der Prozesse wider, die die CPU pro Zeiteinheit belegen, und die CPU-Auslastung steht nicht in direktem Zusammenhang mit der Anzahl der Prozesse. Wir können den Befehl top vmstat verwenden, um die CPU-Auslastung zu überprüfen. Es gibt die folgenden Indikatoren:
%us: zeigt die CPU-Auslastung des User-Space-Programms an (nicht von nice geplant) %sy: zeigt die CPU-Auslastung an des Systemraums, hauptsächlich Kernel-Programme. %ni: Zeigt die CPU-Auslastung von Programmen im Benutzerbereich an und wird über Nice geplant. %id: CPU im Leerlauf %wa: Die Zeit, die die CPU beim Ausführen auf IO wartet %hi: Die Anzahl der von der CPU verarbeiteten Hard-Interrupts %si: Die Anzahl der von der CPU verarbeiteten Soft-Interrupts %st: Vom Virtuellen gestohlene CPU Maschine
So messen Sie eine angemessene durchschnittliche Auslastung
Im Allgemeinen erfüllt die Maschinenleistung die Serviceanforderungen, wenn die durchschnittliche Auslastung niedriger ist als die Anzahl der CPUs. Es spielt keine Rolle, ob sie überschritten wird Die Zahl stellt nicht direkt die CPU-Auslastung dar und kann auf mehr IO-Blockierung zurückzuführen sein. Wenn die durchschnittliche Auslastung mehr als 70 % der CPU-Anzahl beträgt, kann dies dazu führen, dass der Prozess langsam reagiert und somit die normale Funktion des Dienstes beeinträchtigt wird.
Aus der Perspektive historischer Veränderungen
Im Allgemeinen liefert die Top-Verfügbarkeit Indikatoren für die durchschnittliche Auslastung zu drei Zeitpunkten, nämlich: 1 Minute, 5 Minuten und 15 Minuten. Dies spiegelt den jüngsten Zustandsänderungstrend des Systems wider. In der tatsächlichen Produktionsumgebung müssen wir langfristige Überwachungsaufzeichnungen erstellen. Bei abnormalen numerischen Änderungen, beispielsweise wenn die durchschnittliche Auslastung doppelt so hoch ist wie die der CPU, muss das Problem analysiert und untersucht werden.
Umfassende Analyse der Unterschiede zwischen den beiden Indikatoren
Aus den beiden Indikatoren für ausgeglichene Last und CPU-Auslastung werden die folgenden möglichen Situationen kombiniert:
Der Lastdurchschnitt ist hoch, CPU Bei hoher Auslastung werden entweder CPU-intensive Prozesse (Threads) ausgeführt, oder es gibt eine große Anzahl von Prozessen (Threads), die auf die CPU-Planung warten. Der Lastdurchschnitt ist hoch, und bei geringer CPU-Auslastung ist die CPU-Auslastung hoch Beide Prozesse laufen relativ niedrig und die normale Auslastung ist gering. Dies gibt es nicht.
Simulationsfälle und Tools
Wie können wir Fälle mit verschiedenen Kombinationen davon analysieren? zwei Indikatoren für ausgeglichene Last und CPU-Auslastung und finden Sie die Quelle der Indikatoränderungen?
Die folgende Umgebung ist Linux Arch 4.19 / 4 CPU / 8G Speicher
Toolliste
Stresssystem-Stresstest-Tool
Sysstat-Leistungsanalyse-Toolpaket:
mpstat Multi-Core-CPU-Analyseleistungstool, mp bedeutet Multiprozessoren (Multiprozessor) pidstat Prozessleistungsanalysetool, pid bedeutet Prozess-ID. Es wird verwendet, um die CPU-, Speicher-, E/A- und Kontextwechselindikatoren des Prozesses anzuzeigen
Simulationsszenarien
Mit Stress können die folgenden Szenarien simuliert werden
CPU-intensiv Prozesse
# 模拟一个进程, 对 cpu 使用率 100%,限时 600s stress --cpu 1 --timeout 600
IO-intensiver Prozess
Stress's -i-Option, spawnen N Arbeiter, die sich bei sync() drehen
# 模拟一个进程不停的执行 sync stress -i 1 --timeout 600
# 模拟16个进程, 对 cpu 使用率 100%,限时 600s stress --cpu 16 --timeout 600
Tool-Indikatoren
mpstat -P ALL 5 überwacht alle CPUs und gibt alle 5 Sekunden einen Datensatz aus. Achten Sie auf die Indikatoren %usr-Nutzung und %iowait IO-Blockierungszeit ist CPU-intensiv oder IO-intensiv pidstat - u 5 1 Die Daten von Prozessen, die die CPU innerhalb von 5 Sekunden nach dem statistischen Intervall genutzt haben. Achten Sie auf die Indikatoren %usr-Nutzungsrate und %Wartezeit, um die CPU zu nutzen , können Sie beurteilen, ob zu viele Prozesse (Threads) vorhanden sind
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung des Problems der durchschnittlichen Last unter Linux. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!