
Wie überwacht man die Größe der Speicher-IOPS auf einem modernen Linux?
Ich kann die Menge der Speicher-IOPS mit Befehlen wie iostat überwachen. Ich möchte jedoch die Größe der IOPS kennen, die durch die Arbeitslast generiert werden.
Etwa so: In den letzten X Sekunden gab es: 5 IOPS 4K, 10 IOPS 8K, 20 IOPS 16K ...
Ich bin an der Überwachung auf Blockgeräteebene (z. B. /dev/sda) interessiert, aber auch jede andere Ebene wäre interessant.
Antwort1
Niedriges Niveau
Auf niedrigerer Ebene können Sie diese Informationen von erhalten /sys/block/X/stat
, die dokumentiert istHier.
Beispielinhalte sehen so aus:
10465 3250 759844 27528 4400 2983 546848 66306 0 9754 93792
Die gewünschten Felder sind die Spalten 1 und 3 für Lesevorgänge und 5 und 7 für Schreibvorgänge. Die Berechnungsmethode ist für beide gleich, daher bespreche ich nur die Lesevorgänge.
Spalte 1 ist die Anzahl der Lesevorgänge (die Sie bereits überwachen können), und Spalte 3 ist die Anzahl der gelesenen Sektoren. Ein Sektor ist 512 Bytes groß. Um die Größe der Lesevorgänge zu berechnen, führen Sie einfach Folgendes aus: . $col3 * 512 / $col1
Die
Zahlen in dieser Datei sind die Gesamtzahlen seit der Inbetriebnahme der Festplatte. Um die durchschnittliche Lesegröße über einen bestimmten Zeitraum zu berechnen, lesen Sie die Datei einfach zweimal und berechnen Sie mit: ($col3_t2 - $col3_t1) * 512 / ($col1_t2 - $col1_t1)
.
Beachten Sie, dass die obige Methode Ihnen die Größe der auf Anwendungsebene ausgeführten Operationen angibt (die Beschreibung ist nicht exakt, aber nahe genug). Der Kernel kann mehrere Operationen zusammenführen, sodass die Anzahl der auf der Festplatte ausgeführten Operationen kleiner ist. Die Berechnung hierfür lautet: $col3 * 512 / ($col1 - $col2)
. Und um den Wert über einen bestimmten Zeitraum zu erhalten:($col3_t2 - $col3_t1) * 512 / (($col1_t2 - $col1_t1) - ($col2_t2 - $col2_t1))
Hohes Level
iostat
kann Ihnen den Wert ebenfalls geben, allerdings weniger genau. Es unterscheidet nicht zwischen Schreib- und Lesevorgängen und gibt Ihnen den Wert nur in Sektoren, nicht in Bytes an (multiplizieren Sie also erneut mit 512). Aber der Befehl lautet iostat -x -d
, und die zu betrachtende Spalte ist avgrq-sz
.