Überwachung der Festplatten-I/O mit iostat und dstat
Einführung
Die Überwachung von Festplatten-Ein-/Ausgaben ist eine der Schlüsselaufgaben beim Betrieb von Servern in einer Hosting-Infrastruktur. Das Festplattensubsystem beeinflusst direkt die Leistung von Webdiensten, Datenbanken, virtuellen Maschinen, Containern und Hintergrundaufgaben. Selbst bei ausreichendem RAM 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 Serverbesitzer. Es behandelt die Dienstprogramme iostat und dstat, die Prinzipien ihrer Funktionsweise, die Interpretation von Metriken und einen praktischen Ansatz zur Identifizierung von Engpässen bei der Festplatten-E/A in einer Hosting-Umgebung.
Allgemeine Informationen und Funktionsprinzipien
Festplatten-E/A in einer Serverinfrastruktur
Festplatten-Ein-/Ausgaben umfassen Lese- und Schreibvorgänge von Daten auf Blockgeräte. In realen Hosting-Szenarien wird die Last auf das Festplattensubsystem am häufigsten durch folgende Faktoren erzeugt:
- Datenbanken (MySQL, MariaDB, PostgreSQL);
- Webanwendungen mit dynamischem Inhalt;
- E-Mail-Dienste;
- Datensicherung und -synchronisation;
- Protokollierung;
- Swap- und temporäre Dateien;
- Benutzerskripte und Cron-Jobs.
Engpässe können durch langsame Speichergeräte, hohe Konkurrenz zwischen Prozessen, nicht optimale E/A-Planer, fehlerhafte Cache-Operationen oder Virtualisierungsfunktionen auftreten.
Zweck von iostat und dstat
iostat ist ein Dienstprogramm aus dem sysstat-Paket, das entwickelt wurde, um detaillierte Statistiken über die CPU- und Festplattenauslastung zu sammeln. Die Hauptaufgabe von iostat besteht darin, zu zeigen, wie intensiv eine bestimmte Festplatte genutzt wird, ob es eine Anforderungswarteschlange gibt und wie die durchschnittliche Wartezeit für Operationen ist.
dstat ist ein vielseitiges Überwachungstool, das Echtzeitstatistiken über mehrere Subsysteme gleichzeitig anzeigt: CPU, Speicher, Festplatte, Netzwerk, Prozesse. Es ermöglicht die Korrelation von Festplattenaktivität mit der Gesamtserverlast und ist praktisch für schnelle Diagnosen.
Diese Dienstprogramme ergänzen sich gegenseitig: iostat bietet ein genaues Bild auf Geräteebene, während dstat den Kontext des gesamten Systems liefert.
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 OS-Version:
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
sudo dnf install sysstat dstat
Überprüfung des Betriebs von sysstat:
systemctl status sysstat
Wenn der Dienst aktiv ist, werden die relevanten 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
Schritt-für-Schritt-Überprüfung und Analyse
Grundlegende Festplattenanalyse mit iostat
Das Dienstprogramm iostat wird verwendet, um die CPU- und Festplattensubsystemauslastung zu bewerten sowie E/A-Verzögerungen und Warteschlangen zu identifizieren.
Syntax:
sudo iostat [options] [interval] [count]
Am häufigsten verwendete Parameter:
- -x — erweiterte Statistiken;
- -d — nur 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
Das Intervall und die Anzahl der Proben ermöglichen es, Laständerungen im Laufe der Zeit zu verfolgen, anstatt den durchschnittlichen Zustand seit dem Systemstart.
Beispielausgabe von iostat:

Wichtige CPU-Metriken:
- %iowait — der Prozentsatz der Zeit, in der die CPU im Leerlauf ist, während sie auf E/A-Operationen wartet. Ein Anstieg dieser Metrik zeigt die Auswirkung der Festplatte auf die Gesamtleistung an.
- %steal — relevant für virtuelle Server und zeigt gestohlene CPU-Zeit an.
Wichtige Festplattenmetriken:
- %util — der Prozentsatz der Zeit, in der die Festplatte beschäftigt war. Werte, die konstant 80–90% überschreiten, weisen auf eine Sättigung des Geräts hin.
- r_await — die durchschnittliche Zeit (ms) für den Abschluss von Leseoperationen (einschließlich Wartezeit in der Warteschlange).
- w_await — die durchschnittliche Zeit (ms) für den Abschluss von Schreiboperationen (einschließlich Wartezeit in der Warteschlange).
- aqu-sz — (durchschnittliche Warteschlangengröße) die durchschnittliche Länge der Anforderungswarteschlange für die Festplatte. Ein Wert > 1 zeigt bereits eine Warteschlangenbildung an. Ein Wert > 2–4 für HDD / > 1–2 für SSD ist ein Zeichen dafür, dass die Festplatte mit der Last nicht Schritt hält.
Der Unterschied zwischen await und svctm zeigt, ob die Verzögerung durch die Warteschlange verursacht wird und nicht durch die physische Festplattengeschwindigkeit.
Wenn await nur geringfügig svctm überschreitet (Unterschied < 20–30%), werden die Verzögerungen hauptsächlich durch die Festplatte selbst verursacht (langsame physische Lese-/Schreibvorgänge).
Wenn await deutlich größer als svctm ist (Unterschied > 50–100%), wird die Hauptverzögerung durch die Anforderungswarteschlange verursacht (aqu-sz wird hoch sein), 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: hohes await mit niedrigem aqu-sz (~0) weist auf eine langsame Festplatte hin; hohes await mit hohem aqu-sz (>1) weist darauf hin, dass die Festplatte mit Anfragen überlastet ist.
Analyse des Gesamtbildes mit dstat
dstat wird zur Echtzeitbeobachtung des Systems und zur Korrelation der Festplattenlast mit anderen Ressourcen verwendet.
Befehlsbeispiele:
dstat -d
dstat --disk-util
dstat -rd --disk-util
dstat -D vda,sda
Beispielausführung mit einem Intervall:
dstat -rd --disk-util 1 5
Bei der Analyse sollte auf Folgendes geachtet werden:
- Anstieg von iowait in der CPU;
- Lese- oder Schreibspitzen;
- gleichzeitige Netzwerk- und Festplattenaktivität (Backups, Synchronisation).
Beispielausgabe von dstat:
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:
| Kriterien | iostat | dstat |
|---|---|---|
| Datengenauigkeit | Hoch | Hoch |
| Echtzeitmodus | Begrenzt | Ausgezeichnet |
| Historische Daten | Ja (sar) | Nein |
| Farbige Ausgabe | Nein | Ja |
| Erweiterbarkeit | Nein | Plugins |
| CSV-Export | Nein | Ja |
| CPU-Belastung | Niedrig | Mittel |
dstat ist besonders nützlich für kurzfristige Lastspitzen, die in iostat nicht immer erkennbar sind.
Identifizierung von Engpässen bei der Festplatten-E/A
Die folgenden Befehle werden für eine schnelle Diagnose verwendet:
sudo iostat -mx 2
sudo iostat -p /dev/vda 2 5
sar -d 1 5
Typische Anzeichen eines Problems:
- %util über 80% für einen längeren Zeitraum;
- await über 20–30 ms für SSD oder über 50–100 ms für HDD;
- aqu-sz größer als 2–3, was auf eine Warteschlangenbildung 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) — reguläre SATA/SAS/USB-Festplatten
- /dev/nvmeXnY (z.B. /dev/nvme0n1) — NVMe-Laufwerke
- /dev/vdX — virtuelle Festplatten
Identifizierung von Prozessen, die eine hohe Festplatten-E/A-Last verursachen
Nachdem die Überlastung des Festplattensubsystems mit iostat und dstat festgestellt wurde, besteht der nächste Schritt darin, die spezifischen Prozesse zu identifizieren, die intensive Lese- oder Schreibvorgänge initiieren. Eine Analyse auf Geräteebene ohne Identifizierung der Lastquelle ermöglicht keine korrekten Abhilfemaßnahmen.
Verwendung von iotop
Das Hauptwerkzeug zur Suche nach Prozessen, die die Festplatte aktiv nutzen, ist das Dienstprogramm iotop.
sudo iotop -ao
Befehlsparameter:
- -a — zeigt kumulative Statistiken seit dem Start des Prozesses an, was hilft, Hintergrundaufgaben mit langfristiger E/A zu identifizieren;
- -o — zeigt nur die Prozesse an, die derzeit E/A-Operationen durchführen.
Beispielausgabe:
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 11056 be/4 mysql 0.00 B 3.44 M 0.00 % 0.76 % mysqld 2580 be/4 rsync 0.00 B 23.48 M 0.00 % 1.17 % rsync
In der iotop-Ausgabe sollte besonderes Augenmerk auf die Felder DISK READ, DISK WRITE und den Prozentsatz der I/O-Zeit gelegt werden. Typischerweise sind die Quellen der Last Datenbankprozesse, Sicherungsprozesse, Dateisynchronisationsprozesse oder Benutzerskripte.
Verwendung von pidstat für die prozessbezogene E/A-Analyse
Für eine formalere und wiederholbare Analyse kann pidstat, das Teil des sysstat-Pakets ist, verwendet werden.
pidstat -d 1
Dieser Befehl gibt Festplatten-E/A-Statistiken für jeden Prozess in einsekündigen Intervallen aus. Dies ist praktisch, um kurzfristige Aktivitätsspitzen zu identifizieren und sie mit anderen Systemmetriken zu korrelieren.
pidstat ist besonders nützlich in Situationen, in denen die Last periodisch auftritt und nicht immer von iotop erfasst wird.
Verwendung von lsof zur Analyse der Dateiaktivität
In Fällen, in denen es notwendig ist, zu verstehen, mit welchen spezifischen Dateien oder Verzeichnissen ein Prozess arbeitet, wird das Dienstprogramm lsof verwendet.
lsof +D /path
Wo /path ein spezifisches Verzeichnis ist, innerhalb dessen aktive Dateien und Prozesse identifiziert werden müssen. Zum Beispiel könnte dies ein Datenbankverzeichnis, ein Sicherungsverzeichnis oder ein Bereich für temporäre Dateien sein.
Der Befehl ermöglicht es, festzustellen, welche Prozesse derzeit Dateideskriptoren halten und Operationen innerhalb des angegebenen Pfads durchführen, was besonders nützlich ist, wenn die Last von Anwendungen analysiert wird.
Analyse des Lastkontexts
Die Identifizierung eines Prozesses mit hoher Festplattenaktivität ist nicht das Endziel. Der Administrator muss den Kontext seines Betriebs bewerten:
- ist die Last für diesen Dienst erwartet;
- läuft der Prozess zu einem geeigneten Zeitpunkt (z.B. Backups während der Stoßzeiten);
- können der Zeitplan oder die Betriebsparameter geändert werden;
- ist es zulässig, die E/A-Priorität zu reduzieren.
Dieser Ansatz ermöglicht es, normale Last von problematischer Last zu unterscheiden und die richtige Optimierungsmethode zu wählen.
Überprüfung der Richtigkeit der Analyse
Die Richtigkeit der durchgeführten Analyse wird bestätigt, wenn:
- Spitzen in %util, await oder aqu-sz in iostat zeitlich mit der Prozessaktivität in iotop oder pidstat übereinstimmen;
- ein Anstieg von iowait in dstat mit Festplattenoperationen und nicht mit CPU-Last übereinstimmt;
- wiederholte Messungen ein reproduzierbares Lastmuster zeigen.
Für die Datensammlung und anschließende Analyse wird empfohlen, Protokollierung zu verwenden:
sar -d 1 100 > io.log
Dies ermöglicht es, das Verhalten des Festplattensubsystems über einen bestimmten Zeitraum aufzuzeichnen und die Daten bei der Untersuchung von Vorfällen zu verwenden.
Typische Fehler und betriebliche Besonderheiten
In der Praxis des Betriebs von Hosting-Servern sind die folgenden Probleme am häufigsten:
- Ausführung von Backups und Datensynchronisation während der Stoßzeiten;
- starke Nutzung von Swap bei unzureichendem RAM;
- ein ungeeigneter E/A-Planer für den Laufwerkstyp;
- fehlende Priorisierung für Hintergrundaufgaben.
Um die Auswirkungen von Hintergrundprozessen auf die Leistung zu reduzieren, wird empfohlen, das Dienstprogramm ionice zu verwenden, um die E/A-Priorität eines Prozesses zu verwalten, was es ermöglicht, die Auswirkungen von Hintergrundaufgaben auf die Systemreaktionsfähigkeit zu verringern.
Beispiel der Verwendung:
ionice -c3 rsync /source /destination
Wichtige Prioritäten:
- -c1 (Echtzeit) — die höchste Priorität. Wird für latenzkritische Aufgaben verwendet. Kann andere Prozesse vollständig blockieren.
- -c2 (Best-Effort) — die Standardeinstellung für die meisten Prozesse. Ermöglicht die Anpassung der Prioritätsstufe (von 0 (hoch) bis 7 (niedrig)).
- -c3 (Leerlauf) — Hintergrund. Der Prozess erhält nur dann Festplattenzugriff, wenn keine anderen Prozesse sie nutzen. Sicher und empfohlen für Hintergrundoperationen (Backups, Datensynchronisation).
In diesem Beispiel läuft der rsync-Prozess mit der niedrigsten E/A-Priorität, wodurch seine Auswirkungen auf die Kernsystemoperationen minimiert werden. Die Verwendung von ionice ermöglicht es, die Auswirkungen von Hintergrundprozessen zu minimieren, ohne sie vollständig deaktivieren zu müssen.
Fazit
Die Überwachung der Festplatten-E/A ist ein integraler Bestandteil der Aufrechterhaltung der Leistung und Stabilität einer Serverinfrastruktur. Die Dienstprogramme iostat und dstat ermöglichen es, Überlastungssituationen zu identifizieren und den Zustand des Festplattensubsystems zu bewerten, während Tools wie iotop, pidstat und lsof helfen, spezifische Prozesse und die Art ihrer Last zu identifizieren.
Die regelmäßige Anwendung des beschriebenen Ansatzes, die korrekte Interpretation von Metriken und das Management von E/A-Prioritäten helfen, die Antwortzeiten von Diensten zu verkürzen, die Lastvorhersehbarkeit zu erhöhen und die Einhaltung von SLA-Anforderungen sicherzustellen. Anschließend kann diese Methodik durch zentrale Überwachung und Automatisierung der E/A-Lastanalyse erweitert werden.