[LINUX] Konzept der Serverlast, das neue Ingenieure wissen wollen

Vor ungefähr 10 Jahren werde ich den Blog wiederbeleben, als ich noch ein junger Ingenieur war. In letzter Zeit haben sich die Chancen verringert, mit ssh eine Verbindung zum Server herzustellen und ihn zu überprüfen, aber es lohnt sich, sich daran zu erinnern. https://itinao.hatenadiary.org/

Eintägige Veranstaltung

Ich bin ein Ingenieur. Sobald ich zur Arbeit gehe, sagen glitzernde Verkäufer und Planer dies.

Vertrieb "Irgendwie ist der Server schwer" Projekt "Irgendwie! Es wird kein Job"

Ich "Ja, ich weiß nicht, wie ich nachforschen soll." Ich "Es tut mir leid. Ich werde bald meinen Senior kontaktieren."

Als Programmierer fehlt mir das Wissen und die Kenntnisse auf der Infrastrukturseite. Ich möchte etwas tun, aber ich kann nichts dagegen tun. ..

Dies ist ein häufiger Anblick, wenn Sie Ihren eigenen Dienst betreiben.

Immerhin möchte ich etwas tun!

Der Informationsminister ist wichtig, aber schließlich ist er Ingenieur. Ich möchte es selbst tun können. Für eine solche Person. Lassen Sie uns zunächst das Konzept von Engpässen lernen.

Es gibt zwei Hauptmethoden, um über Engpässe nachzudenken

1.CPU-Auslastung
2. I/O Last

1. Wie hoch ist die CPU-Auslastung?

Der Zustand, in dem der Prozess die CPU belegt (berechnet von der CPU) スクリーンショット 2020-03-18 0.58.50.png

Wenn ein Prozess (Programm) die CPU verwendet und die Nutzungsrate lange Zeit 100% beträgt, wird die Ausführung anderer Prozesse beeinträchtigt.

Es wäre ein Problem, wenn ein Wort falsch wäre, aber die 100% ige CPU-Auslastung selbst nicht schlecht ist, und es ist ideal, wenn es keine anderen Engpässe als Festplatten- und Speicherkapazität gibt.

Wenn die CPU 100% plötzlich weiterläuft

Überprüfen Sie, ob das Programm außer Kontrolle geraten ist (Endlosschleife usw.).
Überprüfen Sie die Verarbeitung in der neuesten Release-Version.

2. Was ist dann der Unterschied zwischen CPU-Last und E / A-Last?

E / A bedeutet Eingabe / Ausgabe. Häufiges Ein- und Ausgeben von Daten belastet die Hardware und das Netzwerk, sodass die CPU-Auslastung und die E / A-Auslastung unterschiedlich sind. Eine hohe CPU-Auslastung verlangsamt nicht unbedingt die E / A, sondern viel Lesen und Schreiben auf die Festplatte.

Wenn die E / A-Last fortgesetzt wird

Gibt es viele Programme, die Dateien eingeben und ausgeben?
Gibt es einen Festplattenzugriff aufgrund eines Austauschs aufgrund von Speichermangel?

Wenn nicht genügend Speicher vorhanden ist, verwendet das System Swap. Wenn umgekehrt viel Zugriff auf den Swap besteht, besteht möglicherweise die Möglichkeit, dass der Speicher knapp wird.

Verfahren zur Untersuchung von Engpässen

Bisher haben wir die Konzepte der CPU-Auslastung und der E / A-Auslastung gesehen. Lassen Sie uns als Nächstes fortfahren, wie Engpässe in Bezug auf CPU-Auslastung und E / A-Auslastung untersucht werden.

1.Beruhige zuerst den Geist. Das ist wichtig.
2.Überprüfen Sie den Lastdurchschnitt oben.
3.CPU und ich mit sar/O Überprüfen Sie, welcher höher ist.
4.Informationen für jeden Prozess in ps anzeigen.
5.Wir werden Maßnahmen ergreifen, z. B. das Ausführungsprogramm überprüfen und die Version zurückgeben.
6.Wenn es kein Problem gibt, in der Mitte anzuhalten, beenden Sie den fehlerhaften Prozess oder starten Sie ihn neu.

1. Beruhige dich zuerst

Dies ist jederzeit wichtig. Es tut meinen Augen weh, es schnell loszuwerden, aber keine Panik.

Beschäftigen wir uns mit der Fettigkeit.

2. Sofort TOP-Befehl

Lassen Sie uns zunächst den Lastdurchschnitt mit dem Befehl TOP anzeigen.

Was ist der Straßendurchschnitt?

Die Anzahl der Prozesse, die auf die Ausführung warten, und die Festplatten-E / A pro Zeiteinheit in einer CPU. Eine Zahl, die angibt, wie viele Aufgaben pro Zeiteinheit gewartet haben. Wenn dies hoch ist, bedeutet dies, dass die Belastung des Systems hoch ist.

Was ist der High Road Durchschnitt?

Wenn der Lastdurchschnitt höher als die Anzahl der Kerne ist, kann dies zu einer Last führen.

$top
top - 00:41:49 up 6 days,  2:24,  1 user,  load average: 2.15, 3.02, 3.20
Tasks:  93 total,   1 running,  45 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.2 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3977928 total,  3324844 free,   121568 used,   531516 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  3630656 avail Mem 

Der Lastdurchschnitt: 2,15, 3,02, 3,20 ist der Lastdurchschnitt. Die Werte für die letzten 1 Minute, 5 Minuten und 15 Minuten von links.

Es gibt zwei Dinge zu sehen

Überschreitet der durchschnittliche Laststatus die Anzahl der Kerne?
Tritt ein Tausch auf?

Schauen wir uns als nächstes den Ladestatus für jeden Kern an.

2. Verwenden Sie den Befehl sar, um die CPU-Auslastung und die E / A-Wartezeit anzuzeigen

Im Fall von Multi-Core ist es möglicherweise nicht möglich, allein anhand des Lastdurchschnitts zu beurteilen. Verwenden Sie in einem solchen Fall sar -P ALL, um den Status jeder CPU einzeln zu erfassen. Selbst wenn mehrere CPUs installiert sind und nur eine Festplatte vorhanden ist, kann die CPU-Last auf andere CPUs verteilt werden, die E / A kann jedoch nicht verteilt werden, was zu einer Last führt.

$ sar -P ALL
Linux 3.10.0-862.2.3.el7.x86_64 (118-27-1-88)   10/01/2018  _x86_64_    (2 CPU)

01:17:35 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
01:17:36 AM     all      0.00      0.00      0.00      0.00      0.00    100.00
01:17:36 AM       0      0.00      0.00      0.00      0.00      0.00    100.00
01:17:36 AM       1      0.00      0.00      0.00      0.00      0.00    100.00

Die Bedeutung von jedem ist hier.

Anzeige Erläuterung
%user Prozentsatz der Zeit, in der sich die CPU im Benutzermodus befand
%system Prozentsatz der Zeit, in der sich die CPU im Kernelmodus befand
%iowait Prozentsatz der Zeit, in der die CPU auf E / A gewartet hat
%idle Prozentsatz der Zeit, in der die CPU im Leerlauf war

Hier ist was zu sehen

%Wenn der Leerlauf klein ist, ist die CPU-Auslastung hoch und die CPU kann der Engpass sein.

Überprüfen Sie den Zustandsübergang des der CPU zugewiesenen Prozesses mit dem Befehl ps

Wenn festgestellt wird, dass die CPU die Ursache für die Last ist Als nächstes wollen wir herausfinden, welcher Prozess das Falsche tut.

$ ps auwx | head
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1  19232  1516 ?        Ss   Feb09   0:00 /sbin/init
root         2  0.0  0.0      0     0 ?        S    Feb09   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    Feb09   0:00 [migration/0]
root         4  0.0  0.0      0     0 ?        S    Feb09   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S    Feb09   0:00 [stopper/0]
root         6  0.0  0.0      0     0 ?        S    Feb09   0:06 [watchdog/0]
root         7  0.0  0.0      0     0 ?        S    Feb09   0:00 [migration/1]
root         8  0.0  0.0      0     0 ?        S    Feb09   0:00 [stopper/1]
root         9  0.0  0.0      0     0 ?        S    Feb09   0:00 [ksoftirqd/1]

Siehe unten für die Bedeutung von jedem.

Anzeige Erläuterung
%CPU CPU-Auslastung verarbeiten
%MEM Physische Erinnerung an den Prozess
VSZ(RSS) Virtuell vom Prozess reserviert(Physik)Speicherbereich
STAT Prozessstatus
TIME Zeit, in der der Prozess die CPU belegte
Über STAT (Prozessstatus)

Prozesse, die auf der CPU ausgeführt werden können, befinden sich im Status TASK_RUNNING. Die CPU erhält die Aufgabe mit der höchsten Priorität unter mehreren Prozessen im Status TASK_RUNNING.

Notation Status Erläuterung
R TASK_RUNNING Ausführbarer Zustand
S TASK_INTERRUPTIBLE Wartezustand. Signal kann empfangen werden
D TASK_UNINTERRUPTIBLE Wartezustand. Kein Signalempfang
Z TASK_ZOMBIE Zombie-Zustand. Zustand nach dem Verlassen
T TASK_STOPPED Zustand aussetzen

Es gibt zwei Dinge zu sehen

Überprüfen Sie die Größe des RSS, um festzustellen, ob es extrem große Prozesse gibt.
Überprüfen Sie den Status von TIME. Endlosschleife(TASK_RUNNING)Wenn, steigt die ZEIT weiter an.

Wenn es einen Tausch gibt

Wenn das Austauschen mit dem Befehl TOP erfolgt, kann dies an einem unzureichenden physischen Speicher liegen. Schauen wir uns den Befehl sar genauer an.

$ sar -S

00:00:00 kbswpfree kbswpused%swpused  kbswpcad   %swpcad
00:10:01 2097148 0 0.00         0      0.00
00:20:01 2097148 0 0.00         0      0.00
00:30:01 2097148 0 0.00         0      0.00
00:40:01 2097148 0 0.00         0      0.00
Status Erläuterung
kbswpfree Freier Speicherplatz im Swap-Bereich
kbswpused Nutzungskapazität des Swap-Bereichs
%swpused Swap Area Usage Ratio
kbswpcad Swap Area Cache Kapazität

Nachdem Sie überprüft haben, wie viel Swap hier stattfindet, Es ist leicht zu verstehen, wenn Sie das Intervall mit vmstat wie vmstat 1 100 angeben

$ vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  1 244208  10312   1552  62636    4   23    98   249   44  304 28  3 68  1  0
 0  2 244920   6852   1844  67284    0  544  5248   544  236 1655  4  6  0 90  0
 1  2 256556   7468   1892  69356    0 3404  6048  3448  290 2604  5 12  0 83  0
 0  2 263832   8416   1952  71028    0 3788  2792  3788  140 2926 12 14  0 74  0
 0  3 274492   7704   1964  73064    0 4444  2812  5840  295 4201  8 22  0 69  0
Anzeige Erläuterung
r Anzahl der Prozesse, die auf ihre Ausführung warten
b Anzahl der Schlafprozesse (unterbrechbar), Anzahl der nicht ausführbaren Prozesse
swpd Swap-Größe (KB)
free Freier Speicher (KB)
buff Pufferspeichergröße (KB)
cache Cache-Speichergröße (KB)
si Von der Festplatte eingelagerte Speichergröße (KB)/Sekunden)
so Speichergröße auf Festplatte ausgelagert (KB)/Sekunden)
bi Anzahl der vom Blockgerät empfangenen Blöcke (Blöcke)/Sekunden)
bo Anzahl der an das Blockgerät gesendeten Blöcke (Blöcke)/Sekunden)
in Anzahl der Interrupts/Sekunden
cs Anzahl der Kontextwechsel/Sekunden
us Zeitverhältnis der CPU-Auslastung des Benutzerprozesses
sy Zeit, die zum Ausführen des Kernel-Codes verwendet wird
id Prozentsatz der Zeit, in der die CPU im Leerlauf ist
wa CPU ist ich/Warten auf O.
st Prozentsatz der Zeit, in der dem Gastbetriebssystem keine CPU zugewiesen wurde
r und b sind normalerweise 0~Ungefähr 2.
Wenn diese Anzahl groß ist, haben Sie möglicherweise das Gefühl, dass der Server schwer ist.

Grundsätzlich sind si und so immer Null.
Wenn hier immer eine Zahl angezeigt wird, ist entweder nicht genügend Speicher vorhanden oder es gibt ein Programm, das Speicher belegt.

Zusammenfassung der Gegenmaßnahmen laden

Stellen Sie zunächst mit dem folgenden Befehl fest, ob es sich um eine CPU oder eine E / A handelt

top
sar
ps
vmstat

Als Workaround

Wenn die CPU-Auslastung hoch ist

Verbesserung der Servererweiterung, Programmlogik und des Algorithmus

Wenn die E / A-Last hoch ist

Erweitern Sie den Cache-Bereich durch Hinzufügen von Speicher
Wenn keine Speichererweiterung möglich ist, sollten Sie Daten verteilen und einen Cache-Server einführen
Programmverbesserung I./O Frequenz reduzieren

Hmm, ich bin es leid, es zusammenzustellen. Ich hoffe, dies kann die Ursache der Belastung erklären.

Recommended Posts

Konzept der Serverlast, das neue Ingenieure wissen wollen
Zusammenfassung des Know-hows und der Tipps für die Planung neuer KI-Geschäftsabläufe, die KI-Ingenieure wissen möchten
Grundprinzipien zur Vermeidung unerwünschter E-Mails, die Ingenieure kennen sollten
Ich möchte die Natur von Python und Pip kennenlernen
Zusammenfassung des Python-Implementierungs-Know-hows und Tipps, mit denen KI-Ingenieure vorsichtig sein möchten
Ich möchte die Legende der IT-Technologiewelt kennenlernen
Ich möchte die Bevölkerung jedes Landes der Welt kennenlernen.
Wichtige Operationen, die Sie wissen möchten
[AtCoder für Anfänger] Sprechen Sie über den Rechenaufwand, den Sie grob wissen möchten
Python Hinweis: Wenn Sie die Attribute eines Objekts kennen möchten
Ich möchte wissen, wie LINUX funktioniert!
Die Geschichte der IPv6-Adresse, die ich auf ein Minimum beschränken möchte
Ich möchte eine WEB-Anwendung mit den Daten von League of Legends ① erstellen
Eine Bibliothek für Datenwissenschaft "Ich möchte das tun" auf dem Jupyter Notebook
Eine neue Form der App, die mit GitHub funktioniert: So erstellen Sie GitHub-Apps