Linux System-Monitoring – CPU, RAM, Disk und Prozesse im Blick behalten

Linux-Server effektiv überwachen: htop, df, free, iostat, ss und journalctl richtig einsetzen. Ressourcen analysieren, Engpässe finden und Performance-Probleme lösen.

8 min Lesezeit

Linux System-Monitoring – CPU, RAM, Disk und Prozesse im Blick behalten

Ein langsamer Server oder ein voll gelaufenes Dateisystem – solche Probleme schnell zu erkennen und zu lösen ist eine Kernkompetenz für jeden Linux-Administrator. Linux liefert dafür exzellente Bordmittel mit, die ohne Installation verfügbar sind.

Dieser Guide zeigt dir, wie du CPU, RAM, Disk, Netzwerk und Prozesse effektiv überwachst und Probleme systematisch eingrenzt.


Schnellübersicht: System auf einen Blick

# Systeminformationen auf einen Blick
uname -a         # Kernel-Version
lsb_release -a   # Distribution und Version
hostname         # Hostname
uptime           # Laufzeit und Load Average

Das /proc-Dateisystem

Linux exportiert Systemzustand als Pseudo-Dateisystem:

cat /proc/cpuinfo    # CPU-Informationen
cat /proc/meminfo    # Speicher-Informationen
cat /proc/loadavg    # Load Average
cat /proc/uptime     # Uptime in Sekunden
cat /proc/version    # Kernel-Version

CPU und Last überwachen

Load Average verstehen

uptime
# 10:30:00 up 5 days, 2:15, 1 user, load average: 0.85, 1.20, 0.95
#                                                   1min  5min  15min

Load Average interpretieren:

  • Wert gleich Anzahl der CPU-Kerne = 100% ausgelastet
  • Wert größer als Kerne = Überlastung (Prozesse warten)
# Anzahl CPU-Kerne
nproc
# 4

# Load Average 0.85 bei 4 Kernen = ~21% Auslastung ✓
# Load Average 5.2  bei 4 Kernen = 130% = Überlastung ✗

CPU-Details

# CPU-Modell und Kerne
lscpu
lscpu | grep -E "Model name|CPU\(s\)|Thread"

# CPU-Frequenz (live)
cat /proc/cpuinfo | grep "cpu MHz"

# CPU-Temperatur (wenn sensors installiert)
sudo apt install lm-sensors
sensors

CPU-Nutzung per Prozess

# Top-CPU-Prozesse
ps aux --sort=-%cpu | head -10

# CPU-Nutzung live
top
# Dann: 1 (alle Kerne anzeigen), P (nach CPU sortieren)

RAM und Swap analysieren

Freien Speicher anzeigen

# Übersichtliche Darstellung
free -h
#               total        used        free      shared  buff/cache   available
# Mem:          7.7Gi       2.3Gi       1.2Gi        68Mi       4.2Gi       5.1Gi
# Swap:         2.0Gi          0B       2.0Gi

Spalten erklärt:

  • total – Gesamter RAM
  • used – Aktiv genutzter RAM
  • free – Wirklich frei (ungenutzter Puffer)
  • buff/cache – Buffer/Cache (vom Kernel genutzt, kann bei Bedarf freigegeben werden)
  • available ← Das ist die relevante Zahl! Wie viel kann ein neuer Prozess bekommen?
# Detaillierte Speicherinfo
cat /proc/meminfo | grep -E "MemTotal|MemFree|MemAvailable|SwapTotal|SwapFree|Cached"

# Swap-Nutzung (welche Prozesse nutzen Swap?)
sudo smem -rs swap | head -10
# oder
sudo cat /proc/*/status 2>/dev/null | grep -E "Name:|VmSwap:" | paste - - | awk '$4 > 0'

Speicherhungrige Prozesse

# Top-10 nach RAM-Nutzung
ps aux --sort=-%mem | head -10

# Detailliert (mit Prozessname)
ps aux --sort=-%mem | awk '{printf "%-10s %-6s %-6s %s\n", $1, $2, $4, $11}' | head -10

Swap-Konfiguration

# Swappiness-Wert anzeigen (0=kein Swap, 100=aggressiv)
cat /proc/sys/vm/swappiness
# 60 (Standard)

# Temporär ändern (sofort wirksam)
sudo sysctl vm.swappiness=10

# Dauerhaft (in /etc/sysctl.conf)
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf

Empfehlung: vm.swappiness=10 für Server mit viel RAM. Swap sollte Notreserve sein, kein Regelbetrieb.


Festplattennutzung prüfen

Übersicht Dateisysteme

# Alle eingehängten Dateisysteme (human-readable)
df -h
# Filesystem      Size  Used Avail Use% Mounted on
# /dev/sda1        50G   32G   15G  69% /
# /dev/sda2       100G   45G   50G  47% /data
# tmpfs           3.9G     0  3.9G   0% /dev/shm

# Nur echte Dateisysteme (keine tmpfs/devtmpfs)
df -h --type=ext4 --type=xfs --type=btrfs

# Inodes (statt Bytes)
df -i

Achtung: Ein System kann voll sein, obwohl df -h noch Platz zeigt – wenn alle Inodes verbraucht sind!

Verzeichnisgrößen

# Größe eines Verzeichnisses
du -sh /var/log
# 2.3G    /var/log

# Alle Unterverzeichnisse sortiert nach Größe
du -sh /var/log/* | sort -h

# Top-10 größten Verzeichnisse (gut für Root-Ursachen-Analyse)
du -h /var 2>/dev/null | sort -h | tail -20

# Nur eine Ebene tief
du -h --max-depth=1 /var | sort -h

Platz freimachen

# Log-Dateien komprimieren
sudo journalctl --vacuum-size=500M
sudo journalctl --vacuum-time=4weeks

# Nicht mehr benötigte Pakete
sudo apt autoremove -y
sudo apt autoclean

# APT-Cache leeren
sudo apt clean

# Große Dateien finden
sudo find / -type f -size +100M 2>/dev/null | sort -k5 -h
# oder:
sudo find /var /tmp /home -type f -size +50M -exec ls -lh {} \; 2>/dev/null | sort -k5 -h

# Temp-Dateien
sudo find /tmp -type f -mtime +7 -delete

Prozesse und Ressourcen: top, htop, ps

top – der Klassiker

top

Tastenkürzel in top:

q         Beenden
1         Alle CPU-Kerne einzeln anzeigen
M         Nach Speicher sortieren (Shift+M)
P         Nach CPU sortieren (Shift+P)
k         Prozess beenden (PID eingeben)
r         Nice-Wert ändern (Priorität)
h         Hilfe

htop – interaktiver und übersichtlicher

# Installation
sudo apt install -y htop

htop

htop-Vorteile gegenüber top:

  • Farbige, übersichtliche Darstellung
  • Maus-Unterstützung
  • Prozess-Baum (F5)
  • Einfaches Beenden ohne PID (F9)

Tastenkürzel in htop:

F1        Hilfe
F3        Suchen
F4        Filtern
F5        Prozessbaum
F6        Sortierung wählen
F9        Prozess beenden
F10       Beenden
u         Nach Benutzer filtern

ps – Snapshot der Prozesse

# Alle Prozesse (ausführlich)
ps aux

# Nach CPU sortiert
ps aux --sort=-%cpu | head -15

# Nach RAM sortiert
ps aux --sort=-%mem | head -15

# Prozessbaum
ps axjf
pstree

# Nur eigene Prozesse
ps ux

# Spezifischen Prozess suchen
ps aux | grep nginx

Prozess-Details

# Alle Details eines Prozesses (nach PID)
cat /proc/1234/status
cat /proc/1234/cmdline | tr '\0' ' '
ls -la /proc/1234/fd | wc -l  # Anzahl offener Dateien

# Offene Dateien eines Prozesses
sudo lsof -p 1234

# Prozess-Tree einer PID
pstree -p 1234

Netzwerkverbindungen überwachen

Aktive Verbindungen

# Offene Ports und lauschende Dienste
sudo ss -ltnp
# Alternativ (älterer Befehl):
sudo netstat -ltnp

# Alle aktiven Verbindungen
sudo ss -tnp

# UDP-Ports
sudo ss -lunp

# Statistiken
ss -s

ss-Output verstehen:

State   Recv-Q  Send-Q  Local Address:Port   Peer Address:Port
LISTEN  0       128     0.0.0.0:80          0.0.0.0:*
LISTEN  0       128     127.0.0.1:3306      0.0.0.0:*
  • LISTEN = Port offen, wartet auf Verbindungen
  • ESTABLISHED = Aktive Verbindung
  • 0.0.0.0:80 = Lauscht auf allen Interfaces
  • 127.0.0.1:3306 = Nur lokal erreichbar (gut für DBs!)

Netzwerk-Traffic live

# Installation
sudo apt install -y iftop nethogs

# Traffic nach Interface
sudo iftop -i eth0

# Traffic nach Prozess
sudo nethogs eth0

# Einfache Statistiken
cat /proc/net/dev

Verbindungen nach IP

# Aktive Verbindungen nach IP gruppiert
sudo ss -tn | awk 'NR>1 {print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn

# ESTABLISHED-Verbindungen zählen
sudo ss -tn state established | wc -l

I/O-Performance messen

Disk-I/O live

# iostat installieren
sudo apt install -y sysstat

# I/O-Statistiken anzeigen
iostat -x 2
# Device: r/s w/s rMB/s wMB/s %util
# sda    10.2 45.3 1.20  8.50  45.2

# rrqm = Read Requests Merged
# %util = Auslastung (>80% = Engpass)

# Kompakter
iostat -xm 2 5   # alle 2 Sekunden, 5 Durchläufe

# Nur spezifisches Device
iostat -x sda 2

iotop – I/O nach Prozess

# Installation
sudo apt install -y iotop

# Welcher Prozess macht am meisten I/O?
sudo iotop
sudo iotop -o   # nur aktive Prozesse anzeigen

Disk-Schreibgeschwindigkeit testen

# Sequentieller Schreibtest (dd)
sudo dd if=/dev/zero of=/tmp/testfile bs=1G count=1 oflag=direct
# 1073741824 bytes (1.1 GB) copied, 3.4 s, 316 MB/s

# Aufräumen
rm /tmp/testfile

Logs mit journalctl analysieren

# System-Logs der letzten Stunde
journalctl --since "1 hour ago"

# Kernel-Meldungen (OOM-Killer, Hardware-Fehler)
journalctl -k

# Nur Fehler und kritische Meldungen
journalctl -p err

# OOM (Out of Memory) Killer suchen
journalctl -k | grep -i "oom\|killed process"

# Häufigste Fehler
journalctl -p err --no-pager | awk '{print $5, $6, $7}' | sort | uniq -c | sort -rn | head -20

# Logs aller Services des letzten Boots
journalctl -b

# Live-Monitoring aller Logs
journalctl -f

Klassische Log-Dateien

# Authentifizierung (SSH-Logins, sudo)
sudo tail -f /var/log/auth.log      # Ubuntu/Debian
sudo tail -f /var/log/secure        # Fedora/RHEL

# System-Log
sudo tail -f /var/log/syslog        # Ubuntu/Debian
sudo tail -f /var/log/messages      # Fedora/RHEL

# Kernel-Meldungen
sudo dmesg | tail -50
sudo dmesg -w   # live

Automatisches Monitoring mit watch

watch wiederholt einen Befehl periodisch:

# Speicher alle 2 Sekunden aktualisieren
watch -n 2 free -h

# Festplattennutzung alle 5 Sekunden
watch -n 5 df -h

# Veränderungen hervorheben (-d)
watch -n 2 -d free -h

# Mehrere Werte kombinieren
watch -n 1 'echo "=== CPU ===" && mpstat 1 1 && echo "=== MEM ===" && free -h && echo "=== DISK ===" && df -h /'

Engpass-Diagnose: Schritt für Schritt

Symptom: Server langsam

# 1. Load Average prüfen
uptime
# → Hoch? Weiter mit CPU und I/O-Analyse

# 2. Speicher prüfen
free -h
# → available fast 0? Weiter mit RAM-Analyse

# 3. Top-Prozesse
top  # dann M (nach RAM), dann P (nach CPU)
# → Welcher Prozess frisst alles?

# 4. I/O-Engpass?
iostat -x 2
# → %util > 80? I/O-Problem

# 5. Netzwerk?
sudo ss -tn | wc -l
iftop

Symptom: Disk ist voll

# 1. Wo ist der Platz weg?
df -h

# 2. Größtes Verzeichnis finden
sudo du -h --max-depth=1 / 2>/dev/null | sort -h

# 3. In dem vollen Verzeichnis weiter einschränken
sudo du -h --max-depth=1 /var 2>/dev/null | sort -h

# 4. Gelöschte Dateien, die noch von Prozessen gehalten werden
sudo lsof +L1 | grep -v "^COMMAND"
# → Prozess neustarten um Datei wirklich freizugeben

# 5. Journal bereinigen
sudo journalctl --vacuum-size=200M

Symptom: Prozess reagiert nicht

# 1. Prozess-Status
ps aux | grep name
sudo systemctl status dienst

# 2. Was tut der Prozess? (strace zeigt Syscalls)
sudo strace -p PID -e trace=all 2>&1 | head -50

# 3. Offene Dateien und Verbindungen
sudo lsof -p PID

# 4. Logs
journalctl -u dienst --since "10 min ago"

# 5. Sanft neu starten
sudo systemctl restart dienst
# oder kill und neu starten
sudo kill -HUP PID   # SIGHUP = neu laden

Nützliche Einzeiler für den Alltag

# Top-10 Speicherfresser
ps aux --sort=-%mem | awk 'NR<=10{printf "%-15s %s MB\n", $11, int($6/1024)}'

# Disk-Zusammenfassung
df -h | awk 'NR>1 && $5+0 > 70 {print "ACHTUNG " $5 " auf " $6}'

# Aktive Netzwerkverbindungen nach Port
sudo ss -tnp | awk 'NR>1{split($4,a,":"); print a[length(a)]}' | sort | uniq -c | sort -rn | head

# Letzte 20 Fehler im System-Log
journalctl -p err -n 20 --no-pager

# Größte Dateien im System
sudo find / -type f -size +500M -printf "%s\t%p\n" 2>/dev/null | sort -rn | head -10 | awk '{printf "%.0f MB\t%s\n", $1/1048576, $2}'

Fazit

Systemmonitoring ist Routine – nicht Panik. Mit diesen Tools analysierst du systematisch:

Problem → uptime (Load?) → free (RAM?) → df (Disk?) → top/htop (Prozesse?) → iostat (I/O?) → journalctl (Logs?)

War dieser Artikel hilfreich?