Diagnose von hoher CPU- und RAM-Auslastung
Anleitung zur Diagnose hoher CPU- und RAM-Auslastung auf Servern mit top, htop, ps-Befehlen, OOM-Killer-Mechanismus, Prozessanalyse und Ressourcenoptimierung.
Inhaltsverzeichnis
Einführung
Hohe CPU- oder RAM-Auslastung auf Ihrem Server kann zu Leistungseinbußen, Dienstunterbrechungen und sogar dazu führen, dass der Server nicht mehr reagiert. In dieser Anleitung untersuchen wir die Tools und Methoden zur Identifizierung ressourcenintensiver Prozesse und zur Lösung des Problems.
Schnelle Statusprüfung
top-Befehl
top ist das grundlegendste Tool zur Echtzeit-Überwachung von Systemressourcen:
top
Wichtige Felder:
- %CPU: Prozessorauslastung in Prozent
- %MEM: Speicherauslastung in Prozent
- RES: Physische RAM-Nutzung
- VIRT: Virtuelle Speichernutzung
- TIME+: Gesamte CPU-Zeit
Nützliche Tastenkürzel:
P— Nach CPU-Auslastung sortierenM— Nach Speicherauslastung sortierenk— Prozess beenden (PID eingeben)1— Jeden CPU-Kern einzeln anzeigenc— Vollständige Befehlszeile anzeigen
htop-Befehl
htop ist eine erweiterte und benutzerfreundlichere Version von top:
# Installation
sudo apt install htop -y
# Ausführen
htop
htop-Vorteile:
- Farbige visuelle Oberfläche
- Mausunterstützung
- Horizontales und vertikales Scrollen
- Baumansicht (F5)
- Filterung (F4) und Suche (F3)
Einmalige Statusansicht
# Top 10 Prozesse nach CPU-Auslastung
ps aux --sort=-%cpu | head -11
# Top 10 Prozesse nach RAM-Auslastung
ps aux --sort=-%mem | head -11
# Prozesse eines bestimmten Benutzers
ps -u www-data --sort=-%cpu
# Prozessbaum-Ansicht
ps auxf
CPU-Auslastungsanalyse
Identifizierung von CPU-intensiven Prozessen
# Echtzeit-CPU-Auslastung
mpstat -P ALL 1 5
# CPU-Auslastung pro Prozess (5-Sekunden-Intervalle)
pidstat -u 5 3
# CPU-Auslastung eines bestimmten Prozesses
pidstat -p PID_NUMMER 1
CPU-Auslastungsverlauf
# Historische CPU-Daten mit sar
sar -u 1 10
# CPU-Auslastung der letzten 24 Stunden
sar -u -f /var/log/sysstat/sa$(date +%d)
# Load-Average-Prüfung
uptime
cat /proc/loadavg
Der Load-Average-Wert sollte mit Ihrer CPU-Kernanzahl verglichen werden. Auf einem 4-Kern-Server bedeutet ein Load Average von 4,0 eine 100%ige CPU-Auslastung. 8,0 bedeutet Überlastung.
Analyse CPU-intensiver Prozesse
# Detaillierte Prozessinformationen
ps -p PID_NUMMER -o pid,ppid,user,%cpu,%mem,etime,cmd
# Offene Dateien eines Prozesses
lsof -p PID_NUMMER
# Systemaufrufe eines Prozesses
strace -p PID_NUMMER -c
# Prozess-Threads
ps -T -p PID_NUMMER
RAM-Auslastungsanalyse
Speicherstatusprüfung
# Allgemeiner Speicherstatus
free -h
# Detaillierte Speicherinformationen
cat /proc/meminfo
# Speichernutzungsübersicht
vmstat 1 5
free -h Ausgabe lesen:
total used free shared buff/cache available
Mem: 16Gi 8.2Gi 1.1Gi 256Mi 6.7Gi 7.2Gi
Swap: 4.0Gi 512Mi 3.5Gi
Unter Linux kann der "freie" Speicher niedrig erscheinen, da das System freien Speicher als Disk-Cache verwendet. Der tatsächlich verfügbare Speicher steht in der Spalte "available".
Identifizierung RAM-intensiver Prozesse
# Sortierung nach RSS (Resident Set Size)
ps aux --sort=-rss | head -11
# Detaillierte Speicheranalyse mit smem
sudo apt install smem -y
smem -t -k -s rss
# Speichernutzung pro Prozess
pmap -x PID_NUMMER
Swap-Nutzungsanalyse
# Prozesse, die Swap verwenden
for file in /proc/*/status; do
awk '/VmSwap|Name/{printf $2 " " $3}END{print ""}' $file
done | sort -k 2 -n -r | head -10
# Swap-Aktivität überwachen
vmstat 1 10
# Swappiness-Wert
cat /proc/sys/vm/swappiness
# Swappiness setzen (temporär)
sudo sysctl vm.swappiness=10
# Swappiness setzen (permanent)
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
OOM-Killer-Mechanismus
Der Linux-Kernel aktiviert den OOM (Out of Memory) Killer, wenn der Speicher erschöpft ist, und beendet den Prozess mit dem höchsten Speicherverbrauch.
OOM-Killer-Logs prüfen
# Nach OOM-Killer-Ereignissen suchen
dmesg | grep -i "oom\|out of memory"
# OOM in Systemlogs
journalctl -k | grep -i oom
# Letzte OOM-Ereignisse
grep -i 'oom' /var/log/syslog
OOM-Score-Prüfung
# OOM-Score eines Prozesses
cat /proc/PID_NUMMER/oom_score
Schutz vor OOM Killer
# Kritischen Prozess vor OOM Killer schützen
echo -1000 > /proc/PID_NUMMER/oom_score_adj
# OOM-Schutz im systemd-Dienst
[Service]
OOMScoreAdjust=-1000
Wenn der OOM Killer einen Prozess beendet, deutet dies auf ein ernstes Speicherproblem auf Ihrem Server hin. OOM-Schutz hinzuzufügen, ohne die Ursache zu finden, löst das Problem nicht.
Prozessverwaltung
Prozesspriorität anpassen
# Mit Nice-Wert starten (-20 höchste, 19 niedrigste Priorität)
nice -n 10 ./lange-aufgabe.sh
# Priorität eines laufenden Prozesses ändern
renice -n 15 -p PID_NUMMER
Prozesse beenden
# Sanftes Beenden (SIGTERM)
kill PID_NUMMER
# Erzwungenes Beenden (SIGKILL)
kill -9 PID_NUMMER
# Nach Name beenden
killall prozess_name
pkill -f "prozess_muster"
Ressourcenüberwachungsskript
#!/bin/bash
CPU_THRESHOLD=90
MEM_THRESHOLD=90
LOG_FILE="/var/log/resource-monitor.log"
while true; do
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
CPU_USAGE=$(top -bn1 | grep 'Cpu(s)' | awk '{print $2}' | cut -d'.' -f1)
if [ "$CPU_USAGE" -gt "$CPU_THRESHOLD" ]; then
echo "[$TIMESTAMP] WARNUNG: CPU-Auslastung $CPU_USAGE%" >> $LOG_FILE
ps aux --sort=-%cpu | head -6 >> $LOG_FILE
fi
MEM_USAGE=$(free | grep Mem | awk '{printf("%.0f", $3/$2 * 100)}')
if [ "$MEM_USAGE" -gt "$MEM_THRESHOLD" ]; then
echo "[$TIMESTAMP] WARNUNG: RAM-Auslastung $MEM_USAGE%" >> $LOG_FILE
ps aux --sort=-%mem | head -6 >> $LOG_FILE
fi
sleep 60
done
Fazit
Hohe CPU- und RAM-Auslastung sind kritische Probleme, die die Serverleistung direkt beeinflussen. Mit Tools wie top, htop, ps und vmstat können Sie problematische Prozesse identifizieren, Prioritäten mit nice/renice anpassen und Prozesse bei Bedarf beenden. Die regelmäßige Überprüfung der OOM-Killer-Logs ist wichtig für die frühzeitige Erkennung von Speicherproblemen.
Verwandte Artikel
SSH-Verbindungsproblem: Keine Verbindung zum Server möglich
Anleitung zur Behebung von SSH-Verbindungsproblemen: Path.net Firewall-Regeln, Default Block, Filterregel für SSH-Port erstellen und Fehlerbehebungsschritte.
RDP-Verbindungsproblem: Keine Verbindung zu Windows Server
Anleitung zur Behebung von RDP-Verbindungsproblemen: Path.net Firewall-Regeln, Default Block, Filterregel für RDP-Port erstellen und Fehlerbehebungsschritte.
MTR-Test durchführen und Ergebnisse an Support senden
Anleitung zum Netzwerktest mit WinMTR und Linux MTR, ICMP-Filterregel erstellen und Ergebnisse an das Support-Team senden. Paketverlust und Latenz diagnostizieren.