Überwachung von Disk-I/O mit iostat und dstat
Einführung
Die Überwachung der Festplatten-Ein-/Ausgabe (Disk-I/O) gehört zu den zentralen Aufgaben beim Betrieb von Servern in einer Hosting-Infrastruktur. Das Festplattensubsystem beeinflusst unmittelbar die Leistung von Webdiensten, Datenbanken, virtuellen Maschinen, Containern und Hintergrundaufgaben. Selbst bei ausreichend Arbeitsspeicher und freien CPU-Ressourcen kann eine überlastete oder langsame Festplatte zum Engpass des gesamten Systems werden.
Dieses Handbuch richtet sich an Systemadministratoren, DevOps-Ingenieure und Serverbetreiber. Es behandelt die Dienstprogramme iostat und dstat, ihre Funktionsprinzipien, die Interpretation der Metriken sowie ein praxisnahes Vorgehen zur Ermittlung von Disk-I/O-Engpässen in einer Hosting-Umgebung.
Allgemeine Informationen und Funktionsprinzipien
Disk-I/O in einer Serverinfrastruktur
Die Festplatten-Ein-/Ausgabe umfasst Lese- und Schreibvorgänge auf Blockgeräten. In realen Hosting-Szenarien wird die Last auf das Festplattensubsystem am häufigsten verursacht durch:
- Datenbanken (MySQL, MariaDB, PostgreSQL);
- Webanwendungen mit dynamischen Inhalten;
- Mail-Dienste;
- Datensicherung und Synchronisierung;
- Protokollierung (Logging);
- Swap und temporäre Dateien;
- Benutzerskripte und Cron-Jobs.
Engpässe können durch langsame Speichergeräte, starke Konkurrenz zwischen Prozessen, nicht optimale I/O-Scheduler, fehlerhaft arbeitendes Caching oder Besonderheiten der Virtualisierung entstehen.
Zweck von iostat und dstat
iostat ist ein Dienstprogramm aus dem Paket sysstat zur Erfassung detaillierter Statistiken über die Auslastung von CPU und Festplattengeräten. Die Hauptaufgabe von iostat besteht darin zu zeigen, wie intensiv ein bestimmtes Laufwerk genutzt wird, ob eine Anforderungswarteschlange vorhanden ist und wie hoch die durchschnittliche Wartezeit der Operationen ist.
dstat ist ein vielseitiges Überwachungswerkzeug, das Echtzeitstatistiken zu mehreren Subsystemen gleichzeitig anzeigt: CPU, Arbeitsspeicher, Festplatte, Netzwerk, Prozesse. Es ermöglicht, die Festplattenaktivität mit der Gesamtlast des Servers zu korrelieren, und eignet sich für eine schnelle Diagnose.
Diese Dienstprogramme ergänzen sich: iostat liefert ein genaues Bild auf Geräteebene, während dstat den Kontext des gesamten Systems bereitstellt.
Voraussetzungen und Anforderungen
Vor Beginn der Analyse müssen folgende Bedingungen erfüllt sein:
- Linux-Betriebssystem (Debian, Ubuntu, AlmaLinux, Rocky Linux, CentOS).
- SSH-Zugriff auf den Server.
- Root-Rechte oder die Möglichkeit, Befehle über sudo auszuführen.
Überprüfung der Betriebssystemversion:
cat /etc/os-release
Installation der erforderlichen Pakete:
Debian / Ubuntu:
sudo apt update sudo apt install sysstat dstat
CentOS / RHEL / AlmaLinux / Rocky Linux:
sudo yum install sysstat dstat # or sudo dnf install sysstat dstat
Überprüfung der Funktion von sysstat:
systemctl status sysstat
Ist der Dienst aktiv, werden die entsprechenden Informationen angezeigt:
root@server:~# systemctl status sysstat ● sysstat.service - Resets System Activity Logs Loaded: loaded (/usr/lib/systemd/system/sysstat.service; enabled; preset: enabled) Active: active (exited) since Tue 2025-12-23 10:35:35 UTC; 16min ago Docs: man:sa1(8) man:sadc(8) man:sar(1) Main PID: 731 (code=exited, status=0/SUCCESS) CPU: 7ms
Schrittweise Betrachtung und Analyse
Grundlegende Festplattenanalyse mit iostat
Das Dienstprogramm iostat dient dazu, die Auslastung von CPU und Festplattensubsystem zu beurteilen sowie I/O-Verzögerungen und Warteschlangen zu erkennen.
Syntax:
sudo iostat [options] [interval] [count]
Am häufigsten verwendete Parameter:
- -x - erweiterte Statistiken;
- -d - ausschließlich Festplattendaten;
- -k - Ausgabe in Kilobyte;
- -p - Statistiken für Partitionen oder ein bestimmtes Gerät.
Grundlegendes Beispiel:
sudo iostat -x
Dynamische Analyse:
sudo iostat -xk 5 3
Mit Intervall und Anzahl der Messungen lassen sich Laständerungen im Zeitverlauf verfolgen, statt nur den Durchschnittszustand seit dem Systemstart zu sehen.
Beispielausgabe von iostat

Wichtige CPU-Metriken:
- %iowait - der prozentuale Anteil der Zeit, in der die CPU im Leerlauf auf I/O-Operationen wartet. Ein Anstieg dieser Metrik weist auf den Einfluss der Festplatte auf die Gesamtleistung hin.
- %steal - relevant für virtuelle Server; zeigt die „gestohlene“ CPU-Zeit an.
Wichtige Festplattenmetriken:
- %util - der prozentuale Anteil der Zeit, in der die Festplatte ausgelastet war. Dauerhaft über 80-90 % liegende Werte weisen auf eine Sättigung des Geräts hin.
- r_await - die durchschnittliche Zeit (ms) bis zum Abschluss von Leseoperationen (einschließlich der Wartezeit in der Warteschlange).
- w_await - die durchschnittliche Zeit (ms) bis zum Abschluss von Schreiboperationen (einschließlich der Wartezeit in der Warteschlange).
- aqu-sz - (avg queue size) die durchschnittliche Länge der Anforderungswarteschlange der Festplatte. Ein Wert > 1 zeigt bereits die Bildung einer Warteschlange an. Ein Wert > 2-4 bei HDD bzw. > 1-2 bei SSD ist ein Zeichen dafür, dass die Festplatte der Last nicht gewachsen ist.
Der Unterschied zwischen await und svctm zeigt, ob die Verzögerung durch die Warteschlange und nicht durch die physische Geschwindigkeit der Festplatte verursacht wird.
Übersteigt await svctm nur geringfügig (Differenz < 20-30 %), werden die Verzögerungen hauptsächlich durch die Festplatte selbst verursacht (langsames physisches Lesen/Schreiben).
Ist await deutlich größer als svctm (Differenz > 50-100 %), wird die Hauptverzögerung durch die Anforderungswarteschlange verursacht (aqu-sz ist dann hoch), was auf eine Überlastung der Festplatte durch viele parallele Anfragen hinweist.
In modernen Versionen von iostat (wie im Beispiel) wird svctm nicht angezeigt, da seine Berechnung unzuverlässig ist. Für die Analyse wird die Kombination aus await + aqu-sz verwendet: ein hoher await-Wert bei niedrigem aqu-sz (~0) deutet auf eine langsame Festplatte hin; ein hoher await-Wert bei hohem aqu-sz (>1) deutet darauf hin, dass die Festplatte mit Anfragen überlastet ist.
Analyse des Gesamtbilds mit dstat
dstat dient der Echtzeitbeobachtung des Systems und der Korrelation der Festplattenlast mit anderen Ressourcen.
Befehlsbeispiele:
dstat -d dstat --disk-util dstat -rd --disk-util dstat -D vda,sda
Beispielaufruf mit Intervall:
dstat -rd --disk-util 1 5
Bei der Analyse ist besonders zu achten auf:
- Anstieg von iowait bei der CPU;
- Lese- oder Schreibspitzen;
- gleichzeitige Netzwerk- und Festplattenaktivität (Backups, Synchronisierung).
Example dstat output: dstat -rd --disk-util 1 5 --io/total- -dsk/total- vda- read write| read write|util 0 4.00 | 0 76k|0.50 0 29.5 | 0 240k|0.20 0 1.00 | 0 4096B| 0 0 0 | 0 0 | 0 0 1.00 | 0 32k| 0
Vergleich von dstat und iostat:
| Kriterium | iostat | dstat |
|---|---|---|
| Datengenauigkeit | Hoch | Hoch |
| Echtzeitmodus | Eingeschränkt | Ausgezeichnet |
| Historische Daten | Ja (sar) | Nein |
| Farbige Ausgabe | Nein | Ja |
| Erweiterbarkeit | Nein | Plugins |
| CSV-Export | Nein | Ja |
| CPU-Last | Gering | Mittel |
dstat ist besonders nützlich bei kurzzeitigen Lastspitzen, die in iostat nicht immer erkennbar sind.
Ermittlung von Disk-I/O-Engpässen
Für die Schnelldiagnose werden folgende Befehle verwendet:
sudo iostat -mx 2 sudo iostat -p /dev/vda 2 5 sar -d 1 5
Typische Anzeichen eines Problems:
- %util über längere Zeit oberhalb von 80 %;
- await über 20-30 ms bei SSD bzw. über 50-100 ms bei HDD;
- aqu-sz größer als 2-3, was auf einen Rückstau in der Warteschlange hinweist.
Im Beispiel wird die Festplatte /dev/vda verwendet – dies ist eine virtuelle Festplatte (VirtIO) auf einem virtuellen Server.
Auf physischen Servern und in anderen Umgebungen können Festplatten anders benannt sein:
- /dev/sdX (z. B. /dev/sda) - gewöhnliche SATA-/SAS-/USB-Festplatten
- /dev/nvmeXnY (z. B. /dev/nvme0n1) - NVMe-Laufwerke
- /dev/vdX - virtuelle Festplatten
Ermittlung von Prozessen, die hohe Disk-I/O-Last verursachen
Nachdem mit iostat und dstat eine Überlastung des Festplattensubsystems festgestellt wurde, besteht der nächste Schritt darin, die konkreten Prozesse zu identifizieren, die intensive Lese- oder Schreibvorgänge auslösen. Eine Analyse auf Geräteebene ohne Identifizierung der Lastquelle erlaubt keine zielführenden Abhilfemaßnahmen.
Verwendung von iotop
Das wichtigste Werkzeug zum Auffinden von Prozessen, die die Festplatte aktiv nutzen, ist das Dienstprogramm iotop.
sudo iotop -ao
Befehlsparameter:
-a - zeigt kumulierte Statistiken seit dem Start des Prozesses an, was hilft, Hintergrundaufgaben mit langfristiger I/O-Aktivität zu erkennen;
-o - zeigt nur die Prozesse an, die derzeit I/O-Operationen ausführen.
Beispielausgabe:
TID 41PRIO USER41DISK READ41DISK WRITE41SWAPIN41IO>4141COMMAND 1105641be/441mysql410.00 B 413.44 M410.00 %410.76 %41mysqld 258041be/441rsync410.00 B4123.48 M410.00 %411.17 %41rsync
In der iotop-Ausgabe sollte besonderes Augenmerk auf die Felder DISK READ und DISK WRITE sowie auf den prozentualen Anteil der I/O-Zeit gelegt werden. Typischerweise sind die Lastquellen Datenbankprozesse, Backup-Prozesse, Dateisynchronisierungsprozesse oder Benutzerskripte.
Verwendung von pidstat für die prozessbezogene I/O-Analyse
Für eine strukturiertere und wiederholbare Analyse kann pidstat verwendet werden, das Teil des Pakets sysstat ist.
pidstat -d 1
Dieser Befehl gibt Disk-I/O-Statistiken für jeden Prozess im Sekundentakt aus. Das ist praktisch, um kurzzeitige Aktivitätsspitzen zu erkennen und sie mit anderen Systemmetriken zu korrelieren.
pidstat ist besonders nützlich in Situationen, in denen die Last periodisch auftritt und von iotop nicht immer erfasst wird.
Verwendung von lsof zur Analyse der Dateiaktivität
Wenn nachvollzogen werden muss, mit welchen konkreten Dateien oder Verzeichnissen ein Prozess arbeitet, wird das Dienstprogramm lsof verwendet.
lsof +D /path
Dabei ist /path ein bestimmtes Verzeichnis, innerhalb dessen aktive Dateien und Prozesse ermittelt werden sollen. Das kann beispielsweise das Datenbankverzeichnis, das Backup-Verzeichnis oder ein Bereich für temporäre Dateien sein.
Der Befehl ermöglicht es festzustellen, welche Prozesse aktuell Dateideskriptoren halten und Operationen innerhalb des angegebenen Pfads ausführen, was bei der Analyse der Last durch Anwendungen besonders hilfreich ist.
Analyse des Lastkontexts
Die Identifizierung eines Prozesses mit hoher Festplattenaktivität ist nicht das Endziel. Der Administrator muss den Kontext seiner Ausführung bewerten:
- ob die Last für diesen Dienst erwartbar ist;
- ob der Prozess zu einem passenden Zeitpunkt läuft (z. B. Backups während der Spitzenzeiten);
- ob sich der Zeitplan oder die Betriebsparameter ändern lassen;
- ob eine Absenkung der I/O-Priorität zulässig ist.
Dieser Ansatz ermöglicht es, normale von problematischer Last zu unterscheiden und die richtige Optimierungsmethode zu wählen.
Überprüfung der Korrektheit der Analyse
Die Korrektheit der durchgeführten Analyse ist bestätigt, wenn:
- Spitzen bei %util, await oder aqu-sz in iostat zeitlich mit der Prozessaktivität in iotop oder pidstat zusammenfallen;
- ein Anstieg von iowait in dstat mit Festplattenoperationen und nicht mit CPU-Last zusammenfällt;
- wiederholte Messungen ein reproduzierbares Lastmuster zeigen.
Zur Datenerfassung und späteren Auswertung wird empfohlen, die Protokollierung zu verwenden:
sar -d 1 100 > io.log
Damit lässt sich das Verhalten des Festplattensubsystems über einen bestimmten Zeitraum aufzeichnen und die Daten bei der Untersuchung von Vorfällen verwenden.
Typische Fehler und Betriebsbesonderheiten
In der Praxis des Betriebs von Hosting-Servern treten am häufigsten folgende Probleme auf:
- Ausführung von Backups und Datensynchronisierung während der Spitzenzeiten;
- intensive Nutzung von Swap bei unzureichendem Arbeitsspeicher;
- ein für den Laufwerkstyp ungeeigneter I/O-Scheduler;
- fehlende Priorisierung von Hintergrundaufgaben.
Um den Einfluss von Hintergrundprozessen auf die Leistung zu verringern, wird empfohlen, das Dienstprogramm ionice zur Steuerung der I/O-Priorität eines Prozesses zu verwenden. Damit lässt sich die Beeinträchtigung der Systemreaktionsfähigkeit durch Hintergrundaufgaben reduzieren.
Anwendungsbeispiel:
ionice -c3 rsync /source /destination
Wichtige Prioritäten:
- -c1 (realtime) - die höchste Priorität. Wird für latenzkritische Aufgaben verwendet. Kann andere Prozesse vollständig blockieren.
- -c2 (best-effort) - der Standard für die meisten Prozesse. Ermöglicht die Anpassung der Prioritätsstufe (von 0 (hoch) bis 7 (niedrig)).
- -c3 (idle) - Hintergrund. Der Prozess erhält nur dann Festplattenzugriff, wenn kein anderer Prozess sie nutzt. Sicher und empfohlen für Hintergrundoperationen (Backups, Datensynchronisierung).
In diesem Beispiel läuft der Prozess rsync mit der niedrigsten I/O-Priorität, wodurch sein Einfluss auf die Kernoperationen des Systems minimiert wird. Mit ionice lässt sich der Einfluss von Hintergrundprozessen minimieren, ohne sie vollständig deaktivieren zu müssen.
Fazit
Die Überwachung der Disk-I/O ist ein fester Bestandteil der Aufrechterhaltung von Leistung und Stabilität einer Serverinfrastruktur. Die Dienstprogramme iostat und dstat ermöglichen es, Überlastsituationen zu erkennen und den Zustand des Festplattensubsystems zu beurteilen, während Werkzeuge wie iotop, pidstat und lsof helfen, konkrete Prozesse und die Art ihrer Last zu identifizieren.
Die regelmäßige Anwendung des beschriebenen Vorgehens, die korrekte Interpretation der Metriken und die Steuerung der I/O-Prioritäten tragen dazu bei, die Antwortzeiten von Diensten zu verkürzen, die Vorhersagbarkeit der Last zu erhöhen und die Einhaltung von SLA-Anforderungen sicherzustellen. Künftig lässt sich diese Methodik durch zentralisierte Überwachung und die Automatisierung der I/O-Lastanalyse erweitern.