So verwenden Sie iostat zum Anzeigen der IO-Leistung von Linux-Festplatten

So verwenden Sie iostat zum Anzeigen der IO-Leistung von Linux-Festplatten

TOP-Beobachtung: Der Prozentsatz der CPU-Zeit, der durch IO-Wartezeiten belegt wird. Wenn er höher als 30 % ist, ist der IO-Druck hoch. Verwenden Sie als Nächstes iostat -x 1 10

[root@controller ~]#iostat -d -k 1 10
Gerät: tps kB_lesen/s kB_schreiben/s kB_lesen kB_schreiben
sda 19,00 0,00 112,00 0 112
sda1 0,00 0,00 0,00 0 0
sda2 0,00 0,00 0,00 0 0
sda3 0,00 0,00 0,00 0 0
sda4 0,00 0,00 0,00 0 0
sda5 3,00 0,00 16,00 0 16
sda6 0,00 0,00 0,00 0 0
sda7 16,00 0,00 96,00 0 96

tps: Die Anzahl der Übertragungen pro Sekunde des Geräts. Eine Übertragung bedeutet „eine I/O-Anforderung“

  • kB_read/s: Die Datenmenge, die pro Sekunde vom Gerät gelesen wird
  • kB_wrtn/s: Die Datenmenge, die pro Sekunde auf das Gerät geschrieben wird
  • kB_read: Gesamtmenge der gelesenen Daten
  • kB_wrtn: Die Gesamtmenge der geschriebenen Daten

Verwenden Sie -x, um weitere Informationen zu erhalten

Verwenden Sie -x, um weitere Informationen zu erhalten

Gerätenutzung (%util) und Reaktionszeit (await) anzeigen

[root@controller ~]#iostat -d -x -k 1 10
Gerät: rrqm/s wrqm/sr/sw/s rkB/s wkB/s avgrq-sz avgqu-sz warte auf svctm %util
sda 0,00 22,00 0,00 18,00 0,00 160,00 17,78 0,07 3,78 3,78 6,80
sda1 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
sda2 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
sda3 0,00 15,00 0,00 2,00 0,00 68,00 68,00 0,01 6,50 6,50 1,30
sda4 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
sda5 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
sda6 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
sda7 0,00 7,00 0,00 16,00 0,00 92,00 11,50 0,06 3,44 3,44 5,50
  • rrqm/s: Die Anzahl der Merge-Lesevorgänge pro Sekunde. Das heißt, delta(rmerge)/s
  • wrqm/s: Die Anzahl der Merge-Schreibvorgänge pro Sekunde. Das heißt, delta(wmerge)/s
  • r/s: Die Anzahl der pro Sekunde abgeschlossenen Lesevorgänge vom E/A-Gerät. Das ist delta(rio)/s
  • w/s: Die Anzahl der pro Sekunde abgeschlossenen Schreib-E/A-Gerätevorgänge. Das heißt, delta(wio)/s
  • rsec/s: Anzahl der pro Sekunde gelesenen Sektoren. Das heißt, delta(rsect)/s
  • wsec/s: Anzahl der pro Sekunde geschriebenen Sektoren. Das heißt, delta(wsect)/s
  • rkB/s: Pro Sekunde gelesene KBytes. Dies entspricht der Hälfte von rsect/s, da jede Sektorgröße 512 Byte beträgt. (muss berechnet werden)
  • wkB/s: Die Anzahl der pro Sekunde geschriebenen KBytes. Es ist die Hälfte von wsect/s. (muss berechnet werden)
  • avgrq-sz: Durchschnittliche Datengröße (Sektoren) pro Geräte-E/A-Vorgang. delta(rsect+wsect)/delta(rio+wio)
  • avgqu-sz: Durchschnittliche Länge der E/A-Warteschlange. Das heißt, Delta(aveq)/s/1000 (weil aveq in Millisekunden angegeben ist).
  • warten: Die durchschnittliche Wartezeit (in Millisekunden) für jeden Geräte-E/A-Vorgang. Das heißt, Delta (Ruse + Wuse) / Delta (Rio + Wio).
  • svctm: Durchschnittliche Servicezeit (in Millisekunden) für jeden Geräte-E/A-Vorgang. Das heißt, delta(use)/delta(rio+wio)
  • %util: Wie viel Prozent einer Sekunde werden für E/A-Vorgänge verwendet oder wie viel Zeit pro Sekunde ist die E/A-Warteschlange nicht leer? Das heißt, delta(use)/s/1000 (weil die Einheit der Nutzung Millisekunden ist)

Wenn %util nahe 100 % liegt, bedeutet dies, dass zu viele E/A-Anfragen generiert werden, das E/A-System bereits vollständig ausgelastet ist und auf der Festplatte möglicherweise ein Engpass vorliegt.

Wenn der Leerlauf weniger als 70 % beträgt, ist der IO-Druck relativ hoch und im Allgemeinen gibt es bei der Lesegeschwindigkeit mehr Wartezeiten.

Sie können auch vmstat verwenden, um den b-Parameter () und den wa-Parameter () anzuzeigen.

Weitere Informationen finden Sie unter

svctm ist im Allgemeinen kleiner als await (da die Wartezeit gleichzeitig wartender Anfragen wiederholt gezählt wird). Die Größe von svctm hängt im Allgemeinen mit der Festplattenleistung zusammen. Auch die CPU-/Speicherauslastung wirkt sich darauf aus. Zu viele Anfragen führen indirekt zu einer Erhöhung von svctm. Die Größe der Wartezeit hängt im Allgemeinen von der Servicezeit (svctm) sowie der Länge der E/A-Warteschlange und dem Ausgabemuster der E/A-Anfragen ab. Wenn svctm nahe an await liegt, bedeutet dies, dass es fast keine Wartezeit für I/O gibt; wenn await viel größer als svctm ist, bedeutet dies, dass die I/O-Warteschlange zu lang ist und die Reaktionszeit der Anwendung langsam ist. Wenn die Reaktionszeit den für Benutzer tolerierbaren Bereich überschreitet, können Sie den Austausch einer schnelleren Festplatte, die Anpassung des Kernel-Elevator-Algorithmus, die Optimierung der Anwendung oder ein Upgrade der CPU in Betracht ziehen.

Die Warteschlangenlänge (avgqu-sz) kann auch als Indikator zur Messung der E/A-Last des Systems verwendet werden. Da es sich bei avgqu-sz jedoch um den Durchschnittswert pro Zeiteinheit handelt, kann er nicht die momentane E/A-Flut widerspiegeln.

Andere haben ein gutes Beispiel. (E/A-System vs. Supermarkt-Warteschlange)

Wenn wir beispielsweise in einem Supermarkt an der Kasse anstehen, wie entscheiden wir dann, zu welcher Kasse wir gehen? Als erstes schauen wir uns die Anzahl der Leute in der Schlange an. Fünf Leute sind immer schneller als 20, oder? Neben der Anzahl der Leute schauen wir oft auch, wie viel die Person vor uns eingekauft hat. Wenn vor uns eine Tante steht, die Lebensmittel für eine Woche eingekauft hat, können wir in Erwägung ziehen, die Schlange zu wechseln. Eine andere Sache ist die Geschwindigkeit der Kassierer. Wenn Sie auf einen Neuling treffen, der nicht einmal das Geld zählen kann, müssen Sie warten. Darüber hinaus ist auch das Timing sehr wichtig. Die Kasse, die vor 5 Minuten noch überfüllt war, ist jetzt möglicherweise leer. Zu dieser Zeit ist es sehr angenehm, zu bezahlen. Natürlich geht es dabei darum, dass das, was Sie in den letzten 5 Minuten getan haben, sinnvoller ist als das Anstehen (aber ich habe nichts gefunden, das langweiliger ist als das Anstehen).

Außerdem weisen E/A-Systeme viele Ähnlichkeiten mit Warteschlangen im Supermarkt auf:

  • r/s+w/s ist ähnlich der Gesamtzahl der Zahlungsempfänger
  • Die durchschnittliche Warteschlangenlänge (avgqu-sz) entspricht der durchschnittlichen Anzahl der Personen in der Warteschlange pro Zeiteinheit.
  • Die durchschnittliche Servicezeit (SVCTM) ist vergleichbar mit der Sammelgeschwindigkeit des Kassierers
  • Die durchschnittliche Wartezeit (await) entspricht der durchschnittlichen Wartezeit pro Person
  • Die durchschnittlichen E/A-Daten (avgrq-sz) ähneln der durchschnittlichen Menge an Dingen, die jede Person kauft.
  • Die E/A-Betriebsrate (%util) entspricht der Zeitspanne, die in einer Warteschlange an der Kasse verbringt.

Wir können diese Daten verwenden, um das E/A-Anforderungsmuster sowie die E/A-Geschwindigkeit und Antwortzeit zu analysieren.

%util: Die gesamte IO-Verarbeitungszeit während der statistischen Zeit, geteilt durch die gesamte statistische Zeit. Wenn das statistische Intervall beispielsweise 1 Sekunde beträgt, das Gerät 0,8 Sekunden lang E/A verarbeitet und 0,2 Sekunden lang im Leerlauf ist, dann beträgt die Auslastung des Geräts 0,8/1 = 80 %, sodass dieser Parameter die Auslastung des Geräts angibt. Wenn dieser Parameter 100 % beträgt, bedeutet dies im Allgemeinen, dass das Gerät nahezu mit voller Kapazität läuft (wenn mehrere Festplatten vorhanden sind, muss die Festplattennutzung aufgrund der Parallelitätsfähigkeit der Festplatten natürlich nicht unbedingt einen Engpass erreichen, selbst wenn %util 100 % beträgt).
)

Beim Bereitstellen eines Programms (ich habe ein Programm getestet, das Protokolle in Echtzeit hochlädt) müssen Sie die CPU, den Speicher, die E/A usw. des Systems berücksichtigen, um einen effizienten Betrieb des Systems sicherzustellen.

Wenn das Programm selbst sehr kleine Pakete verarbeitet, viele Ereignisse aufweist, unter hohem Druck steht und keine Intervalle aufweist, beansprucht es viele CPU-Ressourcen.

Wird statt des Arbeitsspeicher-Cache ein Disk-Cache verwendet, kann eine Breakpoint-Retransmission unterstützt werden, um einen zuverlässigen Datenupload zu gewährleisten. Bei einem plötzlichen Stromausfall werden die im Disk-Cache gespeicherten Daten nach der Wiederherstellung trotzdem hochgeladen und gehen nicht verloren. Allerdings erhöht sich die Anzahl der Disk-Lese- und Schreibvorgänge entsprechend. Bei relativ geringen Datenmengen ist die Geschwindigkeit noch erträglich.

Nachfolgend finden Sie eine Analyse dieser Parameterausgabe, die von anderen geschrieben wurde

# iostat -x 1
Durchschnittliche CPU: %Benutzer %nice %sys %idle
16,24 0,00 4,31 79,44
Gerät: rrqm/s wrqm/sr/sw/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz warte auf svctm %util
/dev/cciss/c0d0 0,00 44,90 1,02 27,55 8,16 579,59 4,08 289,80 20,57 22,35 78,21 5,00 14,29
/dev/cciss/c0d0p1 0,00 44,90 1,02 27,55 8,16 579,59 4,08 289,80 20,57 22,35 78,21 5,00 14,29
/dev/cciss/c0d0p2 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00

Die obige iostat-Ausgabe zeigt, dass 28,57 Geräte-E/A-Vorgänge pro Sekunde stattfinden: Gesamt-E/A (io)/s = r/s (Lesen) + w/s (Schreiben) = 1,02 + 27,55 = 28,57 (Male/Sekunde), wovon Schreibvorgänge den Großteil ausmachen (w:r=27:1).

Im Durchschnitt dauert die Ausführung jedes Geräte-E/A-Vorgangs nur 5 ms, aber jede E/A-Anforderung muss 78 ms warten. Warum? Weil es zu viele E/A-Anforderungen gibt (etwa 29 pro Sekunde). Unter der Annahme, dass diese Anforderungen gleichzeitig gestellt werden, kann die durchschnittliche Wartezeit wie folgt berechnet werden:

Durchschnittliche Wartezeit = einzelne I/O-Servicezeit * (1 + 2 + ... + Gesamtzahl der Anfragen - 1) / Gesamtzahl der Anfragen

Auf das obige Beispiel angewendet: Durchschnittliche Wartezeit = 5 ms * (1 + 2 + … + 28)/29 = 70 ms, was sehr nahe an der von iostat angegebenen durchschnittlichen Wartezeit von 78 ms liegt. Dies wiederum deutet darauf hin, dass die I/Os gleichzeitig initiiert wurden.

Pro Sekunde werden viele E/A-Anfragen gestellt (etwa 29), aber die durchschnittliche Warteschlange ist nicht lang (nur etwa 2). Dies zeigt, dass das Eintreffen dieser 29 Anfragen nicht gleichmäßig erfolgt und die E/A die meiste Zeit im Leerlauf ist.

In 14,29 % der Fälle einer Sekunde befinden sich Anforderungen in der E/A-Warteschlange, was bedeutet, dass das E/A-System 85,71 % der Zeit nichts zu tun hat. Alle 29 E/A-Anforderungen werden innerhalb von 142 Millisekunden verarbeitet.

delta(ruse+wuse)/delta(io) =await=78,21=>delta(ruse+wuse)/s=78,21*delta(io)/s= 78,21*28,57=2232,8, was bedeutet, dass die E/A-Anfragen pro Sekunde insgesamt 2232,8 ms warten müssen. Die durchschnittliche Warteschlangenlänge sollte also 2232,8 ms/1000 ms = 2,23 betragen, aber die von iostat angegebene durchschnittliche Warteschlangenlänge (avgqu-sz) beträgt 22,35. Warum?! Da es in iostat einen Fehler gibt, sollte der avgqu-sz-Wert 2,23 und nicht 22,35 betragen.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Linux IO-Multiplexing Epoll-Netzwerkprogrammierung
  • Detaillierte Erklärung des Linux-Befehls iostat
  • Der Unterschied zwischen Level-Triggerung und Edge-Triggerung von Linux IO
  • Interessante Erklärung des Socket IO-Modells von Linux
  • Diskussion über Details der IO-, Bedingungs- und Schleifenverarbeitung in der Linux-Shell-Programmierung
  • Zeigen Sie die Festplatten-E/A in Linux an und finden Sie die Prozesse heraus, die viel Lese- und Schreib-E/A beanspruchen
  • Eine detaillierte Einführung in Linux IO

<<:  JavaScript zum Implementieren einer zeitlich begrenzten Flash-Sale-Funktion

>>:  Verwendung und Unterschiedsanalyse von „Ersetzen in“ und „Einfügen in“ beim Update doppelter Schlüssel in MySQL

Artikel empfehlen

Mehrere Möglichkeiten zum Aktualisieren von Batches in MySQL

Normalerweise verwenden wir die folgende SQL-Anwe...

Detaillierte Erklärung der Whitelist-Regeln von nginx-naxsi

Syntax der Whitelist-Regel: Grundregel wl:ID [neg...

Detaillierte Erläuterung der Persistenz des Vue-Seitenstatus

Inhaltsverzeichnis Code: Auffüllen: Zusammenfasse...

Detaillierte Erklärung der neuen Array-Methoden in JavaScript es6

Inhaltsverzeichnis 1. fürJedes() 2. arr.filter() ...

...

Zusammenfassung der Grundkenntnisse und Vorgänge der MySQL-Datenbank

Dieser Artikel erläutert anhand von Beispielen di...

Detaillierte Zusammenfassung des JavaScript-Arrays

Inhaltsverzeichnis 1. Array-Induktion 1. Teilen S...

Einführungstutorial zu React Hooks

Zustandshaken Beispiele: importiere { useState } ...

Reines CSS3 zur Erzielung einer Mouseover-Schaltflächenanimation, Teil 2

Haben Sie nach den letzten beiden Kapiteln ein ne...

So ändern Sie die Kodierung in MySQL Version 5.7 unter Windows auf UTF-8

Vorwort Ich habe gerade angefangen, MySQL zu lern...

9 praktische CSS-Eigenschaften, die Web-Frontend-Entwickler kennen müssen

1. Abgerundete Ecken Heutige Webdesigns halten stä...