Monitoring in der Shell: top, htop, btop, iftop und GPU-Tools unter Debian 13 und CachyOS
Ein Server hat kein Dashboard – er hat eine Shell. Wer dort sieht, was gerade passiert, braucht keine
Monitoring-Suite: Ohne X11, ohne Agent, ohne Datenbank zeigen
top, htop, btop, glances, iftop und die
GPU-Werkzeuge (amdgpu_top, radeontop, nvtop,
nvidia-smi, intel_gpu_top) genau das, was man in der Minute der Entscheidung
braucht. Dieser Artikel sortiert die Werkzeuge nach Frage statt nach Beliebtheit – inklusive der Dinge, die
kaum jemand benutzt: Batch-Modus für Skripte, PSI-Druckwerte für echte
Engpässe, cgroup-Zähler für Container und die Werte, die man direkt aus
/sys lesen kann.
Abtastung, Zähler und die richtige Frage
Alle Werkzeuge in diesem Artikel fallen in zwei Gruppen, und die Wahl entscheidet mehr als die Optik:
Zähler lesen fortlaufende Kernel-Werte (aufsummierte Ticks, Bytes, Pakete) und lassen
sich beliebig oft abfragen – ss, nstat, /proc/net/dev,
/sys/fs/cgroup. Abtaster bauen aus zwei Zählerständen eine Rate, brauchen
ein Zeitintervall und liefern Momentaufnahmen – top, htop, btop,
iftop, iostat.
| Frage | Passendes Werkzeug | Warum nicht die anderen |
|---|---|---|
| Welcher Prozess frisst CPU? | top -b -o %CPU, htop | btop ist hübscher, liefert aber keine CSV-Zeile für ein Skript |
| Wer schreibt auf die Platte? | iotop -oPa, atop | top zeigt nur iowait als Prozentwert, nicht den Verursacher |
| Blockieren I/O-Wartezeiten die Arbeit? | /proc/pressure/io (PSI) | Load Average zählt wartende Prozesse, aber nicht, wie lange sie warten |
| Ist die Leitung voll – und durch wen? | iftop, nethogs, bandwhich | btop zeigt nur Summen pro Interface |
| Was macht die GPU? | amdgpu_top, nvtop, nvidia-smi -l 1 | CPU-Werkzeuge sehen nur die Auslastung der Rechenkerne, nicht die GPU-Queues |
| Welcher Container verbraucht was? | systemd-cgtop -b -n1, cgroup v2 | top zeigt Prozesse, aber keine Gruppen-Zuordnung |
| Was war gestern um 3 Uhr? | atop -r, sar, vnstat | Alle TUIs zeigen nur die Gegenwart |
/proc, /sys oder nutzt
top -b, glances --stdout, sar und nmon -f – nicht die
Ausgabe eines Vollbild-Terminals.
Praktisch wichtig ist außerdem ein Unterschied, der in der Doku selten so klar steht: Interaktive
TUIs brauchen ein echtes Terminal. Ohne tty beendet sich htop mit einer klaren
Meldung:
htop -n 1 | head
ncurses: cannot initialize terminal type ($TERM="unknown"); exiting
Genau dort endet der Weg für Cronjobs und Skripte – und genau deshalb beginnt dieser Artikel mit
top, das als einziges der großen TUIs einen echten Batch-Modus hat.
Installation: Debian 13 und CachyOS
Auf dem Testsystem (CachyOS) waren top, htop, btop,
glances, nvtop, sensors, cpupower,
duf und ncdu bereits vorhanden – amdgpu_top, nvitop,
iotop, atop und sysstat nicht. Die Versionsunterschiede zwischen
Debian 13 und Arch sind bei diesen Werkzeugen erheblich:
| Werkzeug | Debian 13 (Trixie) | CachyOS / Arch |
|---|---|---|
top | procps 2:4.0.4-9 | procps-ng 4.0.7-1 |
htop | 3.4.1-5 | 3.5.3-1 |
btop | 1.3.2 | 1.4.7 |
bpytop (Python-Vorgänger) | 1.0.68-2 | 1.0.68-2 |
bottom (btm, Rust) | nicht in den Repos | 0.14.9-1 |
glances | 4.3.1 | 4.5.6-1 |
nvtop (AMD/NVIDIA/Intel) | 3.2.0-1 | 3.3.2-1 |
amdgpu_top | nicht in den Repos | 0.11.5-1 |
nvitop | 1.5.0-1 | nicht in den Repos (AUR/pip) |
radeontop | 1.4-2 | 1.4-3 |
intel-gpu-tools | 2.0-1 | 2.5-1 |
iotop | 0.6-42 | 0.6-13 |
atop | 2.11.1-3 | 2.13.0-1 |
sysstat (iostat, mpstat, sar) | 12.7.5-2 | 12.8.0-1 |
nmon | 16q+debian-1 | 16s-1 |
s-tui | 1.1.6-1.2 | 1.5.0-1 |
dool (Nachfolger von dstat) | nicht in den Repos (dstat vorhanden) | 1.3.8-1 |
lm-sensors (sensors) | vorhanden | lm_sensors 3.6.2 |
turbostat | vorhanden | 7.2.6 |
ncdu | 1.22 | 2.9.2 |
duf | 0.8.1 | 0.9.1 |
# Debian 13: die Basis plus Spezialisten
sudo apt install procps htop btop glances nvtop iotop atop sysstat nmon s-tui \
lm-sensors turbostat duf ncdu powertop intel-gpu-tools
# CachyOS / Arch: dieselbe Liste, andere Namen
sudo pacman -S htop btop glances nvtop amdgpu_top radeontop iotop atop sysstat \
nmon s-tui lm_sensors turbostat duf ncdu powertop intel-gpu-tools
amdgpu_top gibt
es nur in den Arch-Repos, nvitop nur unter Debian, btop und nvtop
gibt es überall. lm-sensors packt auf beiden Seiten erstaunlich viel mit aus – auf dem
Testsystem liefert es nicht nur CPU-Temperaturen, sondern auch GPU-Werte (dazu unten im Abschnitt
Takt, Temperatur und Leistung).
top: der Alleskönner mit Batch-Modus
top ist auf jedem Server, weil es zu procps gehört. Sein Alleinstellungsmerkmal
unter den TUIs ist der Batch-Modus -b: Damit landen Ausgaben in Logs, Mails oder Skripten –
das ist die Grundlage jeder simplen Eigenüberwachung.
# Momentaufnahme, eine Sekunde später, nur die CPU-Zeile und die Top-Prozesse
top -b -n1 | head -12
top - 01:30:33 up 1:11, 1 user, load average: 0,28, 0,52, 0,77
Tasks: 4 total, 1 running, 3 sleep, 0 d-sleep, 0 stopped, 0 zombie
%CPU(s): 0,3 us, 0,2 sy, 0,0 ni, 99,5 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
MiB Spch: 94033,4 total, 63989,7 free, 12943,5 used, 19468,6 buff/cache
MiB Swap: 94033,0 total, 94029,1 free, 3,9 used. 81089,9 avail Spch
PID USER PR NI VIRT RES SHR S %CPU %MEM ZEIT+ BEFEHL
1 ba0 16 -4 1052 312 264 S 0,0 0,0 0:00.00 apply-s+
2 ba0 16 -4 8904 4132 3808 S 0,0 0,0 0:00.00 bash
| Option | Wirkung | Praxis |
|---|---|---|
-b | Batch-Modus: keine Vollbildausgabe, ESC-Sequenzen weg | Die Grundlage für Logs und Skripte |
-n 1 | Nach einer Aktualisierung beenden | Für Momentaufnahmen; ohne -n läuft es endlos |
-d 2 | Aktualisierungsintervall in Sekunden | Kürzer als 1 s ist über SSH selten sinnvoll |
-o %CPU | Sortierschlüssel setzen (z. B. %MEM, RES) | Ersetzt das manuelle Drücken von P/M im Batch |
-p 1234 | Nur diese PID(s) beobachten | Ideal, um einen einzelnen Dienst zu verfolgen |
-u www-data | Nur Prozesse eines Benutzers | Trennt Web-User von Systemprozessen |
-1 | Alle CPU-Kerne einzeln anzeigen | Zeigt, ob ein Kern glüht oder die Last verteilt ist |
-H | Threads statt Prozesse | Bei Java, Node und Datenbanken oft die einzig ehrliche Ansicht |
-w 200 | Breitere Ausgabe (Zeilenumbruch vermeiden) | Bei langen Kommandozeilen |
-e | Speicherwerte mit K/M/G-Suffix | Deutlich lesbarer als Rohbytes |
Für eine schlanke Eigenüberwachung reicht schon eine Zeile, die per Cron oder systemd-Timer läuft und nur dann etwas schreibt, wenn es auffällt – hier die Top-5 nach Speicher:
# Die fünf speicherhungrigsten Prozesse, ohne Kopfzeilen
top -b -n1 -o %MEM | sed -n '7,11p'
# Nur das Wichtigste in eine Datei, für einen Tagesverlauf
top -b -n1 -o %CPU | head -12 >> /var/log/meine-cpu-momente.log
top unterschätzt: 1 zeigt die Kerne einzeln,
c die vollständige Kommandozeile, V die Baumansicht, f die
Feldauswahl, k beendet einen Prozess, r ändert die Nice-Stufe, W
speichert deine Ansicht in ~/.toprc. Wer diese sechs Tasten kennt, braucht meist kein
weiteres Werkzeug.
top-Ausgaben lesen
Die erste Zeile ist die meistmissverstandene. load average zählt nicht nur laufende Prozesse,
sondern auch solche, die auf I/O warten – auf einem 16-Kern-System ist eine Last von 4 deshalb kein
Alarm, auf einem 1-Kern-VPS schon.
| Feld | Bedeutung | Typischer Fehlschluss |
|---|---|---|
load average: 0,28, 0,52, 0,77 | Mittelwerte über 1, 5 und 15 Minuten | Nicht durch die Kernzahl geteilt – erst nproc macht daraus Prozent |
us / sy | CPU-Zeit in Anwendungen / im Kernel | Hohe sy-Werte heißen oft: Syscalls oder Netzwerk-Treiber, nicht automatisch der Anwender-Code |
wa | Warten auf I/O (iowait) | Hoher wa-Wert zeigt ein Problem, aber nicht, welches Gerät schuld ist |
st | Steal-Zeit: der Host hat die CPU entzogen | Bei VMs/Miet-Servern die erste Erklärung für „unerklärlich langsam“ |
%CPU | Anteil eines Kerns; 200 % heißt zwei Kerne | Kein Prozentwert von der Gesamtmaschine |
VIRT / RES / SHR | virtueller Adressraum / physischer Speicher / geteilter Speicher | Nur RES ist für den tatsächlichen Verbrauch relevant |
d-sleep | Ununterbrechbar schlafend (meist I/O) | Viele d-sleep-Prozesse sind das ehrlichste Symptom für ein Speicher-/Plattenproblem |
zombie | Beendete Prozesse, die niemand einsammelt | Zombies verbrauchen keinen Speicher – sie zeigen einen Fehler im Elternprozess an |
Last / Kerne × 100. Bei 16 Kernen und Last 4 sind das
25 % – im grünen Bereich. Über 100 % ist Warteschlange, und ab dort lohnt der Blick auf wa,
st und die PSI-Werte weiter unten.
htop: Bedienung und Filter
htop ist die komfortable Alternative: farbige Balken, Prozessbaum, Maus-Support und – für
Server wichtiger – Filter und Sortierung per Kommandozeile. Das ist der Unterschied
zwischen „ich suche" und „ich weiß schon wonach":
# hilfreiche htop-Optionen (3.5.x)
htop -p 1,4711 -d 5 # nur diese PIDs, alle 0,5 Sekunden
htop -u www-data # nur Prozesse eines Benutzers
htop -F nginx # nur Kommandos, die "nginx" enthalten
htop -s PERCENT_MEM # Sortierung schon beim Start
htop -t -s PERCENT_CPU # Baumansicht, nach CPU sortiert
htop --readonly # ohne Kill-/Renice-Funktionen
htop -n 5 # nach 5 Bildern beenden (braucht ein Terminal)
| Bedienung, die im Alltag zählt | Wirkung |
|---|---|
F3 / \ | Suchen (durchsucht auch die vollständige Kommandozeile) |
F4 | Filtern – blendet alles aus, was nicht passt |
F5 / t | Baumansicht (Eltern-Kind-Zusammenhang) |
F6 | Sortierspalte wählen |
u | Nur ein Benutzer anzeigen |
H | Threads ein-/ausblenden |
F9 / F8 / F7 | Signale senden / Nice ändern |
e / l | Umgebung bzw. offene Dateien eines Prozesses anzeigen |
F10 | Beenden – dabei wird die Konfiguration gespeichert |
Die Einstellungen landen in ~/.config/htop/htoprc; Ressourcenlimits bei
Resource limits, die Spaltenauswahl bei Options → Columns. Ein Detail, das auf
Produktivsystemen hilft: htop --readonly verhindert versehentliche Signale, und
htop -u www-data -s PERCENT_CPU beantwortet die Frage „was macht der Web-User?“ in einem
Aufruf.
top -b,
ps --sort=-%cpu oder glances --stdout – nicht htop.
btop: Grafik, Presets, GPU-Anzeige
btop ist das optisch stärkste Werkzeug der Reihe und zeigt neben CPU, Speicher und Platte
auch Netzwerk und – je nach Hardware – GPU-Auslastung. Auf dem Testsystem läuft
1.4.7; die Konfiguration liegt in ~/.config/btop/btop.conf, und die Standardwerte lassen sich
komplett ausgeben, ohne den TUI zu starten:
btop --default-config | grep -E '^(preset|shown_boxes|update_ms|proc_sorting|show_gpu_info|net_auto|temp_scale)'
presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"
shown_boxes = "cpu mem net proc"
update_ms = 2000
proc_sorting = "cpu lazy"
show_gpu_info = "Auto"
net_auto = true
temp_scale = "celsius"
| Aufruf / Taste | Wirkung |
|---|---|
btop -p 3 | Mit Preset 3 starten (-p 0…9) – zeigt direkt das gewünschte Layout |
btop -f nginx | Prozessliste vorfiltern |
btop -u 500 | Aktualisierungsrate in Millisekunden |
btop -t / --no-tty | Anzeige an einfache Terminals anpassen (SSH über alte Clients) |
Esc oder m | Menü – dort Presets, Optionen und Themes |
o | Optionen (direkt in die Einstellungen) |
+ / - | Aktualisierungsrate ändern |
f, Pfeiltasten, Enter | Prozess filtern, navigieren, Detailansicht öffnen |
Zwei Hinweise aus der Praxis: btop ist in C++ geschrieben und deutlich sparsamer als der
Python-Vorgänger bpytop – auf schwachen VPS ist das der Unterschied zwischen „Tool vertretbar“
und „Tool ist das Problem“. Und: Wer die GPU-Zeile sehen will, sollte
show_gpu_info auf On stellen, wenn die Erkennung Auto die Karte nicht
findet – btop liest AMD-Werte direkt aus /sys, NVIDIA-Werte über NVML.
glances: die eierlegende Wollmilchsau
glances hat einen entscheidenden Vorteil gegenüber allen anderen TUIs: es kann
ohne Terminal Daten liefern – als Text, JSON oder CSV. Damit ist es das Bindeglied
zwischen „ich schaue mal“ und „ich überwache dauerhaft“:
# Einmalige Ausgabe als Text (echte Werte vom Testsystem)
glances --stdout cpu,mem,load
cpu: {'total': 1.1, 'user': 1.7, 'nice': 0.0, 'system': 0.5, 'idle': 95.9,
'iowait': 1.8, 'irq': 0.1, 'steal': 0.0, 'cpucore': 32}
mem: {'total': 98601197568, 'available': 84968353792, 'percent': 13.8,
'used': 13632843776, 'cached': 19621306368}
load: {'min1': 0.31, 'min5': 0.51, 'min15': 0.76, 'cpucore': 32}
| Aufruf | Zweck |
|---|---|
glances --stdout cpu,mem,fs | Nur gewählte Plugins, einmalig, für Skripte |
glances --export json --export-json-file /tmp/g.json | Werte als JSON-Datei weiterverarbeiten |
glances --export csv --export-csv-file /tmp/g.csv | CSV-Zeitreihe, z. B. für Tabellenkalkulation |
glances -w | Web-Oberfläche im Browser (Standardport 61208) |
glances -s und glances -c @server | Ein Server sammelt, Clients schauen zu |
glances --sort-processes cpu_percent | Prozesssortierung festlegen |
glances -1 | Pro Kern statt Summe anzeigen |
glances -C /etc/glances.conf | Eigene Konfiguration laden (Schwellenwerte, Plugins) |
Weil glances in Python geschrieben ist, kostet es mehr CPU als btop – auf einem
kleinen VPS merkt man das. Dafür ist die Web-Oberfläche (-w) die schnellste Art, einem
Kollegen „schau mal selbst“ zu sagen, ohne ihm SSH-Zugang zu geben: Die Werte kommen aus derselben
Sammlung wie im Terminal.
--stdout plus Textvergleich: Ein Cronjob, der
glances --stdout cpu liest und bei idle unter einem Schwellenwert eine Mail
schickt, ist in zehn Zeilen gebaut – ein vollständiges Monitoring-System ist dafür nicht nötig.
Die Spezialisten: iotop, atop, sysstat, nmon
Wenn top nur noch iowait anzeigt und nicht den Verursacher, kommen die Spezialisten ins
Spiel. Sie beantworten je eine Frage richtig, statt alles ein bisschen zu zeigen.
| Werkzeug | Frage, die es beantwortet | Besonderheit |
|---|---|---|
iotop | Welcher Prozess schreibt auf die Platte? | Braucht CAP_SYS_ADMIN und Kernel-I/O-Accounting; -oPa = nur aktive Prozesse, kumulativ |
atop | Was war vor zehn Minuten los? | Schreibt Historie (Standard: 28 Tage) – mit atop -r wie ein Videorekorder |
sysstat | Wie war die Last gestern um 3 Uhr? | sar liest die Timer-Dateien; iostat -x, mpstat -P ALL, pidstat für Details |
nmon | Alles auf einer Seite, ohne Maus | nmon -f -s 10 -c 60 schreibt CSV-Dateien für spätere Auswertung |
s-tui | Wie weit kann die CPU boosten, bevor sie drosselt? | Kombiniert Stress-Test und Temperatur/Takt-Anzeige |
dool / dstat | Bekomme ich viele Systemwerte in einer Zeile? | Plugin-basiert; dstat ist upstream abgelöst, unter Arch gibt es nur dool |
powertop | Wer weckt die CPU im Ruhezustand? | Auf Servern selten, auf mini-PCs und Laptops Gold wert |
# Nur aktive I/O-Prozesse, kumulierte Werte (Batch-tauglich mit -b)
sudo iotop -oPa
sudo iotop -b -o -n 3 -d 5
# atop: Live-Ansicht, Historie einsehen, Batch-Modus
sudo atop
sudo atop -r /var/log/atop/atop_20260921
sudo atop -b -n 1
# sysstat: Momentaufnahmen und Verlauf
iostat -xz 1 5 # Platten: Auslastung, Warteschlangen, Latenz
mpstat -P ALL 1 3 # pro Kern
pidstat -p 4711 1 5 # ein einzelner Prozess über 5 Sekunden
sar -u 1 3 # CPU-Verlauf (live, wenn Timer aktiv)
sar -n DEV -f /var/log/sysstat/sa21 # Netzwerk von gestern (Pfad je Distribution)
iostat richtig lesen: Die Spalte %util ist bei NVMe fast
bedeutungslos, weil mehrere Kommandos parallel laufen. Aussagekräftig sind await (mittlere
Wartezeit in Millisekunden) und aqu-sz (Warteschlangenlänge). Wer nur auf %util
schaut, sieht SSDs als „ausgelastet“, die längst fertig sind.
Netzwerk: iftop, nethogs, bandwhich
iftop beantwortet eine Frage sehr gut: welche Verbindung ist gerade laut?
Dafür sortiert es live nach Bandbreite – pro Host-Paar, nicht pro Prozess. Es braucht wie
tcpdump das Recht auf Rohpakete, sonst endet der Start mit einer klaren Meldung:
iftop -n -B -i enp17s0
pcap_open_live(enp17s0): enp17s0: You don't have permission to perform this capture
on that device (Attempt to create packet socket failed - CAP_NET_RAW may be required)
| Option | Wirkung |
|---|---|
-i enp17s0 | Interface wählen (ohne Angabe: das erste mit Traffic) |
-n | Keine Auflösung von Adressen – spart DNS-Last |
-N | Portnummern statt Dienstnamen |
-B | Bytes statt Bits anzeigen (weniger Missverständnisse) |
-f 'tcp port 443' | Eigener Filterausdruck (gleiche Syntax wie tcpdump) |
-F 10.0.0.0/8 | Nur ein Netz betrachten |
-b | Ohne Balkengrafik – nützlich über langsame SSH-Verbindungen |
Wenn die Frage dagegen „welcher Prozess zieht die Leitung?“ lautet, hilft iftop nicht
weiter: Ihm fehlt die Prozesszuordnung. Dafür gibt es nethogs und bandwhich,
die pro Prozess summieren:
sudo nethogs enp17s0 # Bandbreite pro Prozess
sudo bandwhich # Prozess + Verbindung + DNS-Name
Für den Überblick ohne Rechte reichen die Kernel-Zähler: ip -s link,
/proc/net/dev und nload (das ohne Sonderrechte auskommt, weil es nur
/proc/net/dev liest). Wer die Paketebene braucht, ist bei
tcpdump und Netzwerk-Monitoring richtig – dort stehen Filter,
Mitschnitte und Rotation.
AMD-GPUs: amdgpu_top, radeontop und sysfs
AMD hat den Vorteil, dass der Treiber amdgpu alles über /sys veröffentlicht. Damit
funktionieren die Werkzeuge ohne Hersteller-Bibliotheken – und man kann die Werte auch ohne Werkzeug
lesen. Das Testsystem hat zwei AMD-Karten (0x1002:0x13c0 als iGPU und
0x1002:0x744c als dedizierte Karte), also zwei Einträge:
# Auslastung, VRAM, Leistungszustand und Sensorik direkt aus dem Kernel
for c in /sys/class/drm/card[0-9]; do
echo "$(basename $c): busy=$(cat $c/device/gpu_busy_percent 2>/dev/null)% vram=$(cat $c/device/mem_info_vram_used 2>/dev/null) level=$(cat $c/device/power_dpm_force_performance_level 2>/dev/null)"
done
card0: busy=0% vram=445046784 level=auto
card1: busy=5% vram=2925887488 level=auto
Noch mehr Werte liefert die Sensorik über hwmon – Leistung in Mikrowatt, Temperatur in
Milligrad:
cat /sys/class/drm/card1/device/hwmon/hwmon4/power1_average # 30000000 = 30 W
cat /sys/class/drm/card1/device/hwmon/hwmon4/temp1_input # 53000 = 53 °C
| Werkzeug | Stärke | Paket |
|---|---|---|
amdgpu_top | GPU-Auslastung, VRAM, Takte, Leistung, Sensoren – zusätzlich pro Prozess und pro Queue | Arch: extra/amdgpu_top; Debian: nicht in den Repos |
radeontop | Kompakte Auslastung inkl. Blöcke (GFX, Compute, Speicher) | Debian 1.4-2, Arch 1.4-3 |
nvtop | Multi-Vendor-TUI: AMD, NVIDIA und Intel in einer Oberfläche, mit Prozessliste | Debian 3.2.0-1, Arch 3.3.2-1 |
sensors (lm-sensors) | GPU-Temperatur, Lüfter, Leistung und Takte – ohne ein GPU-Tool | überall vorhanden |
# amdgpu_top: Live-Ansicht, Liste der Geräte, Einzelwerte
amdgpu_top
amdgpu_top -l
amdgpu_top --gpu-metrics # detaillierte Queue-Metriken
# radeontop: nur Auslastung, sehr leichtgewichtig
radeontop
# nvtop: alle GPUs, mit Prozessliste und Verlaufsgraph
nvtop -d 10 -p --gpu-info
NVIDIA: nvidia-smi und nvitop
Bei NVIDIA kommt die Information aus der Treiber-Bibliothek (NVML), nicht aus /sys. Das
Standardwerkzeug ist nvidia-smi, das über --query-gpu skriptbare Ausgaben
liefert – der wichtigste Aufruf für Überwachung ist der Dauerlauf:
# Momentaufnahme
nvidia-smi
# Skriptbare Felder, fortlaufend jede Sekunde (CSV)
nvidia-smi --query-gpu=timestamp,name,utilization.gpu,memory.used,memory.total,temperature.gpu,power.draw \
--format=csv -l 1
# Wer nutzt die GPU? (Prozesse)
nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv
# nvitop: TUI mit Prozessbaum, Verlauf und Farbcodierung
nvitop -m auto --once # einmalige Ausgabe (skriptbar)
nvitop # interaktive Ansicht
| Aufgabe | Werkzeug | Hinweis |
|---|---|---|
| Auslastung, VRAM, Temperatur, Leistung | nvidia-smi | Teil des Treiberpakets (Arch: nvidia-utils 615.71.09-1, Debian: nvidia-driver 550.163.01-2) |
| Dauerbeobachtung im Terminal | nvidia-smi -l 1 oder nvitop | nvitop ist komfortabler, nvidia-smi -l überall verfügbar |
| AMD und NVIDIA in einer Ansicht | nvtop | Beste Wahl auf gemischten Systemen |
| Werte in eine CSV schreiben | nvidia-smi --query-gpu=… --format=csv | Feldnamen mit nvidia-smi --help-query-gpu nachschlagen |
nvidia-smi und
nvitop – auf NVIDIA-Hardware sind sie nicht gegengeprüft.
Intel: intel_gpu_top
Bei Intel-Grafik liefert intel_gpu_top (Paket intel-gpu-tools) die Auslastung
getrennt nach Engines – Render, Blitter, Video, Video-Enhance. Es braucht Zugriff auf die
Performance-Zähler:
# Debian 13
sudo apt install intel-gpu-tools
# CachyOS / Arch
sudo pacman -S intel-gpu-tools
# Live-Ansicht bzw. eine Momentaufnahme
sudo intel_gpu_top
sudo intel_gpu_top -l -s 1000 # Liste, jede Sekunde eine Zeile
Interessant ist das getrennte Lesen der Engines: Eine Videokonferenz lastet vor allem Video
und VideoEnhance aus, ein Browser dagegen Render. Wer nur die Gesamtauslastung
ansieht, sieht dort ein mittleres Rauschen und keine Ursache.
Takt, Temperatur und Leistung
sensors aus dem Paket lm-sensors ist auf beiden Distributionen die erste Adresse –
und liefert auf dem Testsystem mehr als nur CPU-Werte: CPU (k10temp), beide GPUs (amdgpu), vier NVMe-Laufwerke
und der Netzwerkchip erscheinen in einer Ausgabe. Zwei Aufrufe sind dafür wichtig:
sensors
k10temp-pci-00c3
Adapter: PCI adapter
Tctl: +65.8°C
Tccd1: +47.1°C
Tccd2: +44.4°C
# Dieselben Werte maschinenlesbar (JSON) – ideal für Skripte
sensors -j | head -c 300
{"k10temp-pci-00c3":{"Adapter":"PCI adapter","Tctl":{"temp1_input":68.375},
"Tccd1":{"temp3_input":51.5},"Tccd2":{"temp4_input":66.625}}, …
| Aufgabe | Befehl | Was du siehst |
|---|---|---|
| Temperaturen aller Sensoren | sensors | CPU, GPU, NVMe, Netzwerk – je nach Hardware unterschiedlich viel |
| Dieselben Werte für Skripte | sensors -j | JSON – z. B. für einen Schwellenwert-Wächter per Cron |
| CPU-Takt, Regler und Profil | cpupower frequency-info | Treiber (amd-pstate-epp), EPP (balance_performance), Bereich 624 MHz – 5.76 GHz |
| Turbo/Boost und C-States | sudo turbostat --interval 2 | Pro Kern: Takt, Auslastung, Package-Leistung, Temperatur |
| Leistungsaufnahme aus dem Kernel | cat /sys/class/powercap/intel-rapl*/energy_uj | Monoton steigender Zähler – Differenz pro Sekunde geteilt durch 1.000.000 ergibt Watt |
| GPU-Leistung ohne GPU-Tool | sensors -j | grep -A6 amdgpu | Leistung (PPT), Lüfterdrehzahl, Kern- und Speichertakt |
Aus der JSON-Ausgabe des Testsystems lässt sich das gut ablesen: Die dedizierte AMD-Karte stand bei 53 °C Kanten- und 57 °C Junction-Temperatur, 72 °C Speicher, 518 U/min Lüfter, 34 W PPT bei 257 W Limit, Kern 183 MHz und Speicher 456 MHz im Ruhezustand. Genau das sind die Werte, die ein leerlaufender Server zeigen soll – verdächtig wird es, wenn sich im Ruhezustand Takt oder Leistung nach oben bewegen.
amd-pstate-epp ist die moderne Taktsteuerung auf AMD (Zen 2+): Statt nur
performance/powersave gibt es die Energy Performance Preference
(power, balance_power, balance_performance, performance).
Auf einem Server ist balance_performance meist die richtige Wahl – Leistung bei Bedarf, ohne
dauerhaft hohen Takt und damit hohe Temperatur.
Druck statt Auslastung: PSI
Die wichtigste Neuerung im Linux-Monitoring der letzten Jahre steht in drei Dateien:
/proc/pressure/cpu, /proc/pressure/memory und /proc/pressure/io.
PSI (Pressure Stall Information) misst, wie viel Zeit Prozesse verloren haben,
weil eine Ressource nicht verfügbar war – nicht, wie sehr sie ausgelastet ist:
for f in /proc/pressure/cpu /proc/pressure/memory /proc/pressure/io; do echo "$f: $(cat $f)"; done
/proc/pressure/cpu: some avg10=0.00 avg60=0.00 avg300=0.00 total=5385586
full avg10=0.00 avg60=0.00 avg300=0.00 total=0
/proc/pressure/memory: some avg10=0.00 avg60=0.00 avg300=0.00 total=1694
full avg10=0.00 avg60=0.00 avg300=0.00 total=1610
/proc/pressure/io: some avg10=1.82 avg60=3.30 avg300=3.57 total=135795517
full avg10=1.73 avg60=3.15 avg300=3.40 total=129768940
| Feld | Bedeutung | Interpretation |
|---|---|---|
some | Mindestens ein Prozess wartete auf die Ressource | Zeigt an, dass es Wartezeiten gibt – aber nicht, wie schlimm sie für die Arbeit sind |
full | Alle lauffähigen Prozesse warteten gleichzeitig (full gibt es nicht für CPU) | Der harte Indikator: die Maschine stand still |
avg10 / avg60 / avg300 | Mittelwerte über 10/60/300 Sekunden in Prozent | Wie load average, nur mit klarer Bedeutung |
total | Kumulierte Wartezeit in Mikrosekunden | Für Verläufe – Differenzen pro Zeit ergeben Prozentwerte |
In der Beispielausgabe ist das Muster typisch: CPU und Speicher sind entspannt (0,00 %), während I/O bei 1,8 % „some“ und 1,7 % „full“ über 10 Sekunden liegt. Genau hier hilft PSI mehr als Load Average: Es zeigt eine I/O-Wartezeit, obwohl die Last mit 1,0 auf 32 Kernen völlig harmlos aussieht.
some unter 5 % ist normal, dauerhaft 10–20 % heißt spürbare
Bremse, über 30 % ist ein Engpass. full über 5 % im IO-Bereich ist ein Alarmsignal – dann
laufen Prozesse nicht nur langsam, sondern stehen. PSI gibt es auch pro cgroup
(/sys/fs/cgroup/…/memory.pressure), womit sich Engpässe bis zum einzelnen Dienst
zurückverfolgen lassen.
Container und cgroups
Auf einem Docker-Host ist die Prozessliste allein irreführend. systemd-cgtop ordnet die Last
den systemd-Units und Slices zu – und hat einen Batch-Modus, der sich für Logs eignet:
systemd-cgtop -b -n1
/user.slice/user-1000.slice/user@1000.service/app.slice/app-dbus…slice 608 - 7.9G - -
Dasselbe Prinzip steckt im cgroup-v2-Dateisystem, das man ohne zusätzliches Werkzeug lesen kann – hier echte Werte aus einem Container:
cat /sys/fs/cgroup/cpu.stat
usage_usec 2727884669
user_usec 2130360234
system_usec 597524434
cat /sys/fs/cgroup/memory.current # aktuelle Belegung in Byte
cat /sys/fs/cgroup/memory.max # Limit („max“ = unbegrenzt)
cat /sys/fs/cgroup/memory.pressure # PSI für genau diese Gruppe
| Aufgabe | Befehl | Hinweis |
|---|---|---|
| Last pro systemd-Slice/Unit | systemd-cgtop, systemd-cgtop -b -n1 | Sortiert nach CPU, Speicher oder I/O |
| Verbrauch eines Docker-Containers | docker stats | Braucht Zugriff auf den Docker-Socket – ohne Gruppenmitgliedschaft scheitert es mit „permission denied“ |
| Limit und Ist-Wert eines Containers | cat /sys/fs/cgroup/system.slice/docker-<ID>.scope/memory.current | Funktioniert ohne Docker-CLI, auch aus dem Host heraus |
| CPU-Zeit eines Containers | cat …/cpu.stat | Differenz von usage_usec über die Zeit ergibt die Auslastung |
| Druck im Container | cat …/memory.pressure | Zeigt, ob das Limit den Container ausbremst – unabhängig vom Host |
top oft nur die eigenen Prozesse (im Testsystem vier Tasks), während load average
und /proc/pressure weiterhin den ganzen Host beschreiben. Wer die Last eines Dienstes
beurteilen will, muss deshalb cgroup-Werte lesen – oder vom Host aus messen.
Speicher, Platte, Dateisysteme
Für Speicherfragen braucht es kein TUI. free -h beantwortet die Frage „wie viel ist wirklich
frei?“ – wobei die Spalte verfügbar (available) die relevante ist, nicht frei:
free -h
gesamt benutzt frei gemns. Puffer/Cache verfügbar
Speicher: 91Gi 12Gi 62Gi 1,6Gi 19Gi 79Gi
Swap: 91Gi 3,9Mi 91Gi
vmstat 1 2 | tail -2
r b swpd free buff cache si so bi bo in cs us sy id wa st gu
0 0 3980 65525452 807456 19128388 0 1 2749 2404 17379 7 1 0 98 0 0 0
0 0 3960 65526556 807456 19128636 20 0 20 372 9302 10988 1 0 98 1 0 0
| Werkzeug | Zeigt | Wann es hilft |
|---|---|---|
free -h | RAM und Swap, inklusive verfügbar | Erste Frage bei OOM-Meldungen und „die Maschine hängt“ |
vmstat 1 | Spalten si/so (Swap), wa (I/O-Wait), Kontextwechsel | Swap-Aktivität im Ruhezustand ist ein Alarmsignal |
duf | Alle Dateisysteme in einer Tabelle mit Prozentwerten | Schneller als df -h, übersichtlicher bei vielen Mounts |
ncdu | Interaktiv, wer den Platz belegt (Verzeichnis für Verzeichnis) | Wenn die Platte voll ist und du zu langsam wäre |
iostat -xz 1 | Pro Gerät: Durchsatz, await, aqu-sz, %util | Platten sind der Engpass, nicht die CPU |
duf
│ MOUNTED ON │ SIZE │ USED │ AVAIL │ USE% │ TYPE │ FILESYSTEM │
│ / │ 463.8G │ 161.5G │ 300.2G │ 34.8% │ btrfs │ /dev/sdb2 │
│ /boot │ 2.0G │ 249.6M │ 1.8G │ 12.2% │ vfat │ /dev/sdb1 │
Der Blick auf die Dateisysteme lohnt sich auch bei Btrfs: duf zeigt die vom Kernel gemeldete
Belegung – bei Btrfs ohne compsize also die tatsächlich belegten Blöcke, die je nach
Kompression kleiner sein können als die Summe der Dateigrößen. Wer das auseinanderhalten will, schaut sich
die Anteile in unserem Dateisystem-Vergleich an.
Fehlerbild → Werkzeug
| Symptom | Erstes Werkzeug | Was du meist siehst |
|---|---|---|
| Server reagiert träge, Last hoch | top -b -n1, dann vmstat 1 | Hohe wa/si-Werte heißen Platte oder Swap, nicht CPU |
| Speicher voll, Prozess wird beendet | free -h, dmesg | tail | Der OOM-Killer im Log nennt den Prozess; RES zeigt den wahren Verbraucher |
| „Die Platte ist langsam“ | iostat -xz 1, iotop -oPa | await steigt und ein Prozess schreibt dauerhaft – oft Logs oder ein Backup |
| Netzwerkverbindung bricht ab | iftop -n -B, dann tcpdump | Ein Gegenüber mit hoher Rate oder ein Retransmit-Muster |
| Container wird unerklärlich langsam | systemd-cgtop, cat …/memory.pressure | Limit erreicht oder I/O-Druck im Container |
| GPU-Aufgabe bricht ab | amdgpu_top / nvidia-smi, dmesg | grep -i amdgpu | Temperatur- oder Leistungslimit, VRAM voll oder Treiber-Reset im Log |
| „Es fühlt sich alles langsam an, ich sehe aber nichts“ | cat /proc/pressure/* | Wartezeiten ohne sichtbare Auslastung – der Fall, den Load Average verschweigt |
Was hier nicht getestet wurde
Damit die Angaben einordenbar bleiben – geprüft heißt: in dieser Umgebung selbst ausgeführt:
| Angabe | Status |
|---|---|
Versionen von top, htop, btop, glances, nvtop, sensors, cpupower, duf, ncdu | Direkt geprüft (--version, pacman -Q) |
Ausgaben von top -b, free, vmstat, duf, sensors (inkl. -j), cpupower, PSI, cgroup-Dateien, systemd-cgtop -b | Direkt ausgeführt – die Zahlen stammen vom Testsystem |
Optionen und Tasten von htop, btop, nvtop, iftop, glances | Aus der jeweiligen Programmhilfe (und bei btop aus der Standard-Konfigurationsdatei) geprüft |
| GPU-Werte (Auslastung, VRAM, Temperatur, Leistung, Takt) | Direkt aus /sys und sensors -j gelesen – zwei AMD-Karten, ein iGPU- und ein dGPU-Modell |
| Bilder der Oberflächen von htop, btop, nvtop, iftop | Keine – in der Testumgebung gibt es kein interaktives Terminal; htop verweigert den Start ohne tty |
amdgpu_top, radeontop, nvitop, intel_gpu_top, iotop, atop, sysstat, nmon, s-tui, powertop | Nicht installiert – Befehle und Optionen entsprechen der Dokumentation |
| NVIDIA- und Intel-GPU-Werte | Nicht geprüft – das Testsystem hat ausschließlich AMD-GPUs |
| Paketnamen und Versionen für Debian 13 und CachyOS | Aus den Distributionsquellen geprüft, nicht installiert |
| Prozesszahlen des Testsystems | Nur eingeschränkt aussagekräftig – in der Containeransicht werden wenige Prozesse sichtbar, während load average den ganzen Host beschreibt |
Fazit
Die Shell ist kein Notbehelf, sondern für viele Fragen das schnellste Werkzeug: top für die
Übersicht und für Logs, htop oder btop zum Arbeiten, glances für
Automatisierung, iotop und iostat für Platten, iftop und
nethogs fürs Netzwerk, die GPU-Tools für alles, was nicht CPU ist – und
PSI für die Fälle, die alle anderen übersehen.
1. Übersicht und Logs:
top -b -n1 -o %CPU – das einzige TUI mit Batch-Modus2. Arbeiten am Terminal:
htop (schnell, Tasten) oder btop (Grafik, GPU)3. Skripte und Zeitreihen:
glances --stdout, sar, nmon -f4. Engpässe finden:
/proc/pressure/*, iotop -oPa, iostat -xz, iftop5. GPU:
amdgpu_top (AMD), nvidia-smi -l 1 bzw. nvitop (NVIDIA), nvtop für gemischt