iostat - CPU- und Disk-I/O-Statistik-Spickzettel
iostat meldet CPU-Auslastung und pro-Device-Disk-I/O-Statistiken — Durchsatz, IOPS, Request-Latenz und Queue-Tiefe. Es ist der Standard-Erste-Halt zur Diagnose von Speicher-Engpässen auf Linux: Ist die Disk gesättigt, Werden Requests in die Warteschlange eingereiht, Spitzt sich die Latenz? Es wird als Teil des sysstat-Pakets zusammen mit mpstat, pidstat und sar versendet.
Installation
| Plattform | Befehl |
|---|
| Debian/Ubuntu | sudo apt install sysstat |
| Fedora/RHEL | sudo dnf install sysstat |
| Arch Linux | sudo pacman -S sysstat |
| macOS | iostat ist eingebaut (andere Ausgabe) |
| Verifizieren | iostat -V |
Grundlegende Nutzung
| Befehl | Beschreibung |
|---|
iostat | Ein Report seit dem Boot (CPU + Devices) |
iostat 2 | Aktualisiere alle 2 Sekunden |
iostat 2 5 | 5 Reports, 2 Sekunden auseinander |
iostat -x | Erweiterte Stats (die nützlichen) |
iostat -d | Nur Device-Stats (kein CPU) |
iostat -c | Nur CPU-Stats |
Der Befehl, den du tatsächlich möchtest
# Erweitert, Human-Readable, pro-Device, alle 2s
iostat -xmt 2
| Flag | Effekt |
|---|
-x | Erweiterte Statistiken (util%, await, aqu-sz, …) |
-m | Bericht in MB/s (verwende -k für KB/s) |
-t | Timestamp mit jedem Report drucken |
-p DEV | Partitionen eines Devices anzeigen (z.B. -p sda) |
-d 2 | Device-Report alle 2 Sekunden |
-h | Human-Readable, NVMe-freundliche Formatierung |
Erweiterte Ausgabe lesen (-x)
| Spalte | Bedeutung |
|---|
r/s, w/s | Read/Write-Requests pro Sekunde (IOPS) |
rMB/s, wMB/s | Read/Write-Durchsatz |
rareq-sz / wareq-sz | Durchschnittliche Request-Größe |
r_await, w_await | Durchschn. Read/Write-Latenz (ms) — Schlüssel-Metrik |
aqu-sz | Durchschnittliche Queue-Tiefe (Requests im Flug) |
%util | Bruchteil der Zeit, in der das Device beschäftigt war |
Signale interpretieren
| Beobachtung | Interpretation |
|---|
%util nahe 100% | Device ist gesättigt (Vorsicht auf SSD/NVMe — kann parallelisieren) |
Hoher await (Zehntel ms+) | Requests sind langsam — Latenz-Engpass |
Hoher aqu-sz | Requests stapeln sich schneller als die Disk sie entwässert |
| Hohe IOPS, niedriger Durchsatz | Kleine zufällige I/O (typische DB/Metadata-Last) |
| Niedrige IOPS, hoher Durchsatz | Große sequenzielle I/O (Backups, Streaming) |
Auf moderner SSD/NVMe kann %util 100% lesen, während das Device noch Kopfraum hat (es bedient Requests parallel). Vertraue await und aqu-sz mehr als %util dort.
CPU-Sektion
| Feld | Bedeutung |
|---|
%user / %nice | Zeit im Benutzer-Space |
%system | Zeit im Kernel |
%iowait | CPU-Idle warten auf I/O (Speicher-Druck-Hinweis) |
%steal | Zeit vom Hypervisor gestohlen (laute Nachbarn) |
%idle | Leerlauf-Zeit |
Hoher %iowait neben hohem Disk-await zeigt direkt, dass Speicher der Engpass ist.
Häufige Workflows
# Beobachte einen verdächtigen Disk-Engpass live
iostat -xmt 2
# Konzentriere dich auf ein Device und seine Partitionen
iostat -xmt -p nvme0n1 2
# Korreliere CPU-Iowait mit Device-Latenz während eines Load-Tests
iostat -xmt 1 60 > iostat.log
| Tool | Fokus |
|---|
| iostat | Pro-Device-I/O + CPU-Stats |
| iotop | Welcher Prozess macht die I/O |
| dstat/dool | Kombinierte CPU/Disk/Net in einer Ansicht |
| sar | Historische/aufgezeichnete Systemaktivität |
Verwende iostat, um zu sehen, dass das Device langsam ist, dann iotop, um zu sehen, welcher Prozess verantwortlich ist.
Ressourcen