
Das Folgende ist die Net-SNMP-Ausgabe und wie Sie sehen, ist diskIOLA nicht verfügbar:
SNMP table: UCD-DISKIO-MIB::diskIOTable
diskIOIndex diskIODevice diskIONRead diskIONWritten diskIOReads diskIOWrites diskIOLA1 diskIOLA5 diskIOLA15 diskIONReadX diskIONWrittenX
25 sda 845276160 2882477056 576632 42597061 ? ? ? 5140243456 883350772736
Nach den Definitionen hierhttp://www.net-snmp.org/docs/mibs/ucdDiskIOMIB.html:
diskIOLAxbedeutet die durchschnittliche Festplattenauslastung x Minuten (%).
Die anderen Werte in der Tabelle sind:
- diskIONRead – Die Anzahl der seit dem Booten von diesem Gerät gelesenen Bytes.
- diskIONWritten – Die Anzahl der Bytes, die seit dem Booten auf dieses Gerät geschrieben wurden.
- diskIOReads – Die Anzahl der Lesezugriffe von diesem Gerät seit dem Booten.
- diskIOWrites - Die Anzahl der Schreibzugriffe auf dieses Gerät seit dem Booten
Wie kann diese Last manuell berechnet werden, da sie nicht auf dem Server erfasst wird?
Am Ende möchten wir den Benutzern Diagramme zeigen, anhand derer sie feststellen können, ob die IO einer Festplatte hoch ist oder nicht. Wir können dies entweder anhand von Lese-/Schreibbytes/Sek. oder Lese-/Schreibanforderungen/Sek. anzeigen.
Wenn wir nur die Lese-/Schreibanforderungen/Sekunde anzeigen, wissen wir, dass viele E/A-Vorgänge stattfinden. Wir wissen jedoch nicht, ob die Schreib-/Lesegeschwindigkeit der Festplatte dadurch beeinträchtigt wird.
Und die Anzeige der R/W-Geschwindigkeit allein kann uns nicht sagen, warum die Geschwindigkeit beeinträchtigt ist – ob es an zu vielen I/O-Operationen liegt oder an nicht genügend Pufferspeicher für asynchrone Schreibvorgänge. Daher müssen wir beides anzeigen.
Aber was bedeutet der andere Wert „Disk IOLoad“ und wie können wir ihn berechnen und warum wird er nicht in SNMP erfasst? Verursacht es eine große Belastung, wenn es aktiviert wird? Wenn das Erfassen dieses Werts eine große Belastung verursacht, können wir ihn manuell berechnen. Aber wie lautet die Formel?
Antwort1
Die von Ihnen angegebenen Informationen reichen nicht aus, um die Festplattenauslastung in Prozent zu berechnen. Die Festplattenauslastung in Prozent wird wie folgt berechnet disk_time_spent_in_io / elapsed_time
.
Wenn Ihre Festplatte beispielsweise 0,25 Sekunden für die Ausführung von E/A in einem Zeitraum von 1 Sekunde benötigt, ist Ihre Festplatte zu 25 % ausgelastet.
Die Anzahl der Operationen ist bedeutungslos, wenn es um die Auslastung in Prozent geht. Abhängig von Ihrer Festplatte und der Art der ausgeführten IO (Massen- oder Zufallsoperationen) könnte sie bei 10 IOPS oder 10.000 IOPS zu 100 % ausgelastet sein. Die einzige Möglichkeit, dies herauszufinden, ist die Zeit, die die Festplatte zum Ausführen dieser IOPS benötigt.
Antwort2
Für alle, die nach einer Lösung suchen, berechnet iostat einen Prozentsatz aus /sys/block/sda/stat
. Die Formel lautet ungefähr:
{now,past}_tot_ticks = total time this block device has been active (/sys/block/sda/stat)
{now,past}_uptime = uptime in /proc/uptime (first value)
percentage = (now_tot_ticks - past_tot_ticks) / (now_uptime - past_uptime) / 10
Ein Befehl, um die IO-Last in Prozent über eine Sekunde abzurufen:
$ cat \
<(cat /sys/block/sda/stat && cat /proc/uptime) \
<(sleep 1 && cat /sys/block/sda/stat && cat /proc/uptime) \
| awk -v RS="" '{printf "%.2f%\n", ($27-$10)/($33-$16) / 10}';
Weiterführende Literatur:
[1]https://www.kernel.org/doc/Documentation/block/stat.txt
[2]https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/s2-proc-uptime
[3]https://github.com/sysstat/sysstat/blob/v11.4.3/iostat.c