docker stats - Ressourcenverbrauch von Containern in Echtzeit überwachen
docker stats - Ressourcenverbrauch von Containern in Echtzeit überwachen
docker stats zeigt in Echtzeit, was jeder Container gerade verbraucht — der schnellste Weg, um einen auffälligen Container zu finden.
Grundnutzung
docker stats # Alle laufenden Container, live aktualisiert
docker stats --no-stream # Einmalige Momentaufnahme
docker stats myapp db redis # Nur bestimmte Container
docker stats --no-stream --all # Auch gestoppte Container
Die Spalten erklärt
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
a3b2c1d4e5f6 myapp 2.34% 128MiB / 512MiB 25.00% 1.2MB / 800kB 12MB / 4MB 18
| Spalte | Bedeutung |
|---|---|
| CPU % | CPU-Anteil relativ zu allen Kernen. 100% = 1 voller Kern |
| MEM USAGE / LIMIT | Aktueller RAM-Verbrauch / konfiguriertes Limit (oder Host-RAM) |
| MEM % | RAM-Verbrauch als Prozentsatz des Limits |
| NET I/O | Netzwerkdurchsatz: empfangen / gesendet |
| BLOCK I/O | Disk-I/O: gelesen / geschrieben |
| PIDs | Anzahl laufender Prozesse im Container |
Wichtig bei CPU %: Auf einem 4-Kern-Host kann ein Container theoretisch bis zu 400 % erreichen (alle Kerne ausgelastet). --cpus="1.0" begrenzt auf 100 %.
Format anpassen
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}"
Nur Namen und CPU:
docker stats --no-stream --format "{{.Name}}: {{.CPUPerc}}"
Alle verfügbaren Felder:
.ID, .Name, .CPUPerc, .MemUsage, .MemPerc, .NetIO, .BlockIO, .PIDs
Nützliche One-Liner
Hungrigs Container nach CPU sortiert:
docker stats --no-stream --format "{{.CPUPerc}}\t{{.Name}}" | sort -rn | head -5
Container nach RAM sortiert:
docker stats --no-stream --format "{{.MemUsage}}\t{{.Name}}" | sort -rh | head -5
Gesamt-Ressourcen aller Container:
docker stats --no-stream --format "{{.CPUPerc}}" | awk '{sum += $1} END {print "Gesamt CPU:", sum "%"}'
docker top: Prozesse im Container
Wo docker stats den Container als Ganzes zeigt, zeigt docker top die einzelnen Prozesse darin:
docker top myapp # Prozess-Liste (wie ps aux)
docker top myapp -eo pid,pcpu,pmem,comm # Bestimmte Spalten
| Befehl | Zeigt |
|---|---|
| docker stats | Ressourcen auf Container-Ebene |
| docker top | Prozesse innerhalb eines Containers |
| docker exec myapp ps aux | Dasselbe wie top, aber aus Container-Sicht |
Monitoring-Integration
Für dauerhafte Überwachung docker stats per Cron als Snapshot:
# /etc/cron.d/docker-stats-snapshot
*/5 * * * * root docker stats --no-stream --format "{{.Name}},{{.CPUPerc}},{{.MemUsage}}" >> /var/log/docker-stats.csv
Professioneller: cAdvisor exportiert Metriken für Prometheus:
services:
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker:/var/lib/docker:ro
ports:
- "8080:8080"
OOM-Erkennung
Wenn MEM % dauerhaft über 90 % liegt und der Container mit Exit 137 abstürzt, hat der OOM-Killer zugeschlagen:
docker inspect --format='{{.State.OOMKilled}}' myapp # true = OOM
docker events --filter event=oom # Live OOM-Events
docker stats liefert in Sekunden die Information, die man zur Fehleranalyse und Kapazitätsplanung braucht — und das ohne zusätzliche Tools.