Wie kann ich die Festplattenlast unter Linux überwachen?

101

Gibt es ein gutes Befehlszeilenprogramm, um die Festplattenlast unter Linux zu überwachen? Etwas wie, topaber dann Überwachung der Festplattenaktivität Iso-CPU-Auslastung.

Insbesondere vermute ich, dass bei einigen (Hochlast-) Servern nach mehreren Optimierungen an verschiedenen Teilen des Programms, die darauf ausgeführt werden, der Engpass im Moment einfach das Protokollieren von Dateien auf der Festplatte ist. Ich finde es jedoch sehr schwierig zu beurteilen, wie viel Verkehr die Server verarbeiten können.

Mein ideales Werkzeug wäre ein Ausdruck mit der Aufschrift "Sie nutzen derzeit 35% Ihrer Festplattenbandbreite". Irgendwelche Ideen?

Pieter
quelle
1
Perfekte Frage, ist genau das, was ich gesucht habe =)
rafa.ferreira
Es ist möglich, sysfs direkt zu lesen /sys/block/sda/stat. Feld Nr. 1 gibt die Gesamtzahl der Lesevorgänge an, Feld Nr. 5 die Gesamtzahl der Schreibvorgänge, Feld Nr. 9 die Anzahl der laufenden E / A-Vorgänge. Weitere Informationen finden Sie unter kernel.org/doc/Documentation/iostats.txt. Die Werte sind lange ohne Vorzeichen und werden möglicherweise umgebrochen .
Sastanin
Dies ist eine sehr gute Frage, da wir auf Plesk-Servern ständig mit diesem Problem kämpfen. Was jedoch fehlt, ist how do you do it with SNMP?. Es ist in Ordnung, sich anzumelden und Dinge zu überprüfen, aber man braucht wirklich historische Daten.
Eugene van der Merwe

Antworten:

83

Mit dem iostatTool können Sie sich ein ziemlich gutes Bild davon machen .

% iostat -dx /dev/sda 5

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.78    11.03    1.19    2.82    72.98   111.07    45.80     0.13   32.78   1.60   0.64

Die Festplattenauslastung ist in der letzten Spalte aufgeführt. Dies ist definiert als

Prozentsatz der CPU-Zeit, in der E / A-Anforderungen an das Gerät gesendet wurden (Bandbreitennutzung für das Gerät). Eine Gerätesättigung tritt auf, wenn dieser Wert in der Nähe von 100% liegt.

Dave Cheney
quelle
3
In welchem ​​Paket befindet sich dies in Debian, falls vorhanden? apt-cache dumphat nichts für iostat aufgedreht
hBy2Py
9
@ Brian: Es ist in der Sysstat-Paket (durch yum sowieso ...)
Joe
Konnte dies auf RHEL 6.5 nicht finden. Ist dies für RHEL verfügbar?
Hazok,
Kann das ohne Verzögerung weitergehen? Der Versuch, eine einzelne Instanz auszuführen, um Daten von abzurufen, erhält vermutlich dieselbe Nummer, da keine Stichproben genommen werden können.
Wilf
@Hazok Es ist Teil des sysstat RPM auf RHEL 6.5.
TheGeneral
81

iotop ist eine Version von top, die angibt , wie viel E / A jeder Prozess verwendet. Es befindet sich in den Standard-Ubuntu-Repositories. Ich weiß nicht, ob es in RHEL oder Fedora ist, aber es sollte sein.

Bildbeschreibung hier eingeben

Verwenden Sie für ältere Kernel (z. B. CentOS 5.x oder RHEL 5.x), die iotop nicht unterstützen, stattdessen topio (hier dokumentiert: http://yong321.freeshell.org/freeware/pio.html#linux . Es basiert auf / proc // io für io-Statistiken und bietet ähnliche Funktionen wie iotop. Weitere Informationen finden Sie unter dem Link.

Tim Howland
quelle
1
In der Tat ist es nicht standardmäßig in Ubuntu installiert, so dass man folgendes Problem haben könnte: sudo apt-get install iotop, um es zu bekommen
Moshe
1
iotop benötigt einen Kernel höher als 2.6.20, was leider sowohl RedHat el4 als auch el5 ausschließt.
Dave Cheney
2
Ab RedHat 5.4 wurden die für die Ausführung von iotop erforderlichen Bits zurückportiert. Genießen!
Dave Cheney
Es ist in Fedora :).
Jamie
13

Wie von sastanin in Kommentaren vorgeschlagen, können Sie die in /sys/block/sda/statoder angegebenen Werte direkt verarbeiten /proc/diskstats. Dies kann hilfreich sein, wenn keines der anderen genannten Tools verfügbar ist und Sie sie nicht einfach installieren können.

Zum Beispiel (IIUC) sollte so etwas (in Bash) die Anzahl der Lesevorgänge pro Sekunde angeben:

OLD=`awk '{print $1}' /sys/block/sda/stat` # First field is number of read I/Os processed
DT=1
for ii in `seq 1 10`
do
    sleep $DT
    NEW=`awk '{print $1}' /sys/block/sda/stat`
    echo $((($NEW-$OLD)/$DT))
    OLD=$NEW
done

Weitere Informationen finden Sie unter https://www.kernel.org/doc/Documentation/iostats.txt und https://www.kernel.org/doc/Documentation/block/stat.txt .

Skippy le Grand Gourou
quelle
7

Sie sollten einen Blick auf atop werfen , das die Leistung von iotop / top / iftop an einem Ort vereint und die kritischen Teile Ihres Systems hervorhebt.

Yvan
quelle
5

Ich würde empfehlen, sich das nmon-Tool anzuschauen. Es zeigt Ihnen das Laden einer Reihe von Systemparametern sowie das Aufzeichnen von Daten in einer Datei zur späteren Einsichtnahme. Es ist ein kostenloses Tool, das Sie hier herunterladen können :

MikeyB
quelle
5

hdparm -T /dev/sdaUm herauszufinden, wie hoch Ihre Gesamtbandbreite ist, können Sie die Puffer-Cache-Leistung (Fileio) hdparm -t /dev/sdatesten, um die Leseleistung des Geräts zu testen

Beispiele: Mein Laptop erhält 82 MB / s von der SATA-Festplatte und 2 GB / s vom Cache. Mein Dekstop erhält 12 GB / s aus dem Cache und 500 MB / s aus dem HW-RAID-Array. Ich vermute, dass diese letzten Zahlen auf Hardware der Serverklasse doppelt so hoch sein könnten.

setze readahead höher als 256, 4096 funktioniert am besten für mich

for i in 128 256 512 1024 2048 4096 8192 16384 32768  
do  
hdparm --setra $i  
  for j in 1 2 4 8 16 32  
  do  
  time dd if=/dev/sda of=/dev/null bs="$j"k  count=<fixthis> 1GB / blocksize  
  done  
done  

mal lesen 1GB bei verschiedenen Blockgrößen und verschiedenen Read-Aheads

user2987
quelle
Willkommen bei SF. Sie können die Code-Hervorhebung in Ihren Posts verwenden, indem Sie Zeichenfolgen in Anführungszeichen setzen oder Absätze einrücken.
ℝaphink
Zwei Dinge - 1) --setraist jetzt -aund 2) die hdparm -{T,t}Befehle geben laut nur Festplattenlesevorgänge aus strace, sind also nicht destruktiv. (Standard-Haftungsausschluss zu Ratschlägen im Internet)
i336_
4

Das Standardwerkzeug zum Anzeigen der Festplattenlast ist iostat.

Es wird nicht angezeigt, wie viel Prozent der Festplattenbandbreite Sie verwenden, da nicht bekannt ist, wie viel Bandbreite Ihre Festplatte hat. In jedem Fall weist Ihre Festplatte nur die vom Hersteller angegebene Zahl für große Übertragungen zusammenhängender Daten auf.

Alnitak
quelle
3

Ich denke, RRDtool sollte tun, was Sie wollen, hier verwendet es einen Daemon, um Systemdaten zu sichern und dann können Sie es verarbeiten, wie Sie möchten . Ich habe es oft verwendet, um Diagramme usw. zu erstellen, um die Systemlast zu messen.

PixelSmack
quelle