Zum Inhalt springen

Hohe CPU- und Load-Werte unter Linux: So finden Sie den Verursacher

Mittel 15 Min. Aktualisiert:

Kurze Antwort

Hohe CPU- und Load-Werte unter Linux werden meist durch einen einzelnen Prozess verursacht, der zu viele Ressourcen verbraucht, sei es durch einen Anwendungsfehler, eine Fehlkonfiguration oder einen externen Angriff. Verwenden Sie `top`, `htop` und `ps`, um den Prozess zu finden, prüfen Sie, ob es sich um einen legitimen Dienst handelt, und optimieren, begrenzen oder starten Sie ihn neu. Wenn das Problem wiederholt auftritt, analysieren Sie die Protokolle und die Konfiguration.

So erkennen Sie das Problem

  • Der Server reagiert langsam, SSH-Befehle verzögern sich
  • Der Load Average liegt dauerhaft über der Anzahl der CPU-Kerne
  • Die Website oder Anwendung läuft langsam
  • Die Lüfter des Computers laufen auf Hochtouren
  • Das Monitoring sendet Alarme für hohe CPU-Auslastung

Häufigste Ursachen

Prozess mit übermäßigem CPU-Verbrauch

Eine Anwendung, Datenbank oder ein Skript kann in eine Schleife geraten oder einen Fehler haben, der 100 % eines Kerns verbraucht. Dies ist die häufigste Ursache für hohe Last.

Schlecht konfigurierter Dienst

Nginx, MySQL, PHP-FPM oder ein anderer Dienst kann falsch konfiguriert sein und zu viele Arbeitsprozesse oder Anforderungen erzeugen. Überprüfen Sie die Konfiguration und die Anzahl der Prozesse.

Externer Angriff oder Bots

Ein Angriff oder aggressives Indexieren kann eine große Anzahl von Anfragen erzeugen und die CPU belasten. Überprüfen Sie die Zugriffsprotokolle und schützen Sie den Dienst.

Speichermangel (Swap)

Wenn der RAM knapp wird, beginnt das System, Swap zu verwenden, was die Last drastisch erhöht und die Leistung verlangsamt. Überprüfen Sie `free -h` und `vmstat`.

Hängende oder nicht endende Prozesse

Skripte, die nicht beendet werden, oder Prozesse im lang anhaltenden Zustand `D` (Warten auf E/A) können die Last erhöhen. Zombie-Prozesse verbrauchen selbst keine CPU, können aber auf ein Problem mit dem Elternprozess hinweisen. Überprüfen Sie die Prozessliste und deren Zustände.

Lösung Schritt für Schritt

  1. 1

    Aktuelle Auslastung prüfen

    Führen Sie uptime aus, um den Load Average für 1, 5 und 15 Minuten anzuzeigen. Vergleichen Sie die Werte mit der Anzahl der CPU-Kerne (nproc). Wenn der Load größer als die Anzahl der Kerne ist, kann das System überlastet sein, insbesondere wenn die CPU-Auslastung nahe 100 % liegt.

  2. 2

    CPU-intensiven Prozess identifizieren

    Führen Sie top aus und drücken Sie P, um nach CPU-Verbrauch zu sortieren. Achten Sie auf die Spalten %CPU und COMMAND. Für eine übersichtlichere Anzeige installieren Sie htop (sudo apt install htop oder sudo dnf install htop) und starten es.

  3. 3

    Alle Prozesse und Details anzeigen

    Verwenden Sie ps aux --sort=-%cpu | head -n 10, um die Top-10-Prozesse nach CPU anzuzeigen. Für Details zu einem bestimmten Prozess (PID) verwenden Sie ps -p PID -o pid,ppid,cmd,%cpu,%mem.

  4. 4

    Prüfen, ob der Prozess legitim ist

    Stellen Sie anhand des Namens und Pfads des Prozesses fest, ob er zu einem bekannten Dienst gehört (z. B. nginx, mysqld, php-fpm). Wenn Sie unsicher sind, prüfen Sie, wann der Prozess gestartet wurde (ps -p PID -o lstart) und wer ihn gestartet hat (ps -p PID -o user).

  5. 5

    Anwendungsprotokolle analysieren

    Überprüfen Sie die Protokolle des verdächtigen Dienstes: journalctl -u dienstname -n 50 oder Dateien in /var/log/. Suchen Sie nach Fehlern, wiederholten Meldungen oder unerwarteten Anfragen.

  6. 6

    Speicher und Swap prüfen

    Führen Sie free -h und vmstat 1 5 aus. Wenn die Spalten si/so ansteigen (aktives Swapping), kann RAM-Mangel die Ursache für die hohe Last sein. Erwägen Sie, Speicher hinzuzufügen oder die Anzahl der Prozesse zu reduzieren.

  7. 7

    Problematischen Dienst stoppen oder neu starten

    Wenn Sie den Dienst identifiziert haben, starten Sie ihn neu: sudo systemctl restart dienstname. Wenn der Prozess unbekannt und verdächtig ist, versuchen Sie zunächst, ihn sicher zu stoppen: sudo systemctl stop dienstname oder sudo kill -15 PID. Verwenden Sie sudo kill -9 PID nur als letztes Mittel, da es zu Datenverlust oder -beschädigung führen kann. Wenn der Dienst Daten schreibt oder eine Datenbank verwendet, erstellen Sie vor dem Eingriff eine Sicherung.

  8. 8

    Ressourcen für den Dienst begrenzen

    Für Dienste unter systemd können Sie Limits in der Unit-Datei festlegen (z. B. CPUQuota=50%). Nach der Änderung der Unit-Datei führen Sie sudo systemctl daemon-reload aus und starten den Dienst neu. Für PHP-FPM stellen Sie pm.max_children ein, für die Datenbank max_connections. Konsultieren Sie die Dokumentation für die genauen Parameter.

  9. 9

    Prüfen, ob ein Angriff vorliegt

    Überprüfen Sie die Zugriffsprotokolle des Webservers (/var/log/nginx/access.log oder ähnlich) und suchen Sie nach einer großen Anzahl von Anfragen von derselben IP-Adresse. Blockieren Sie bei Bedarf die IP über die Firewall (sudo ufw deny from IP) oder richten Sie Rate Limiting ein.

Wenn nichts hilft: tiefere Analyse

Wenn die hohe Last wiederholt auftritt und keinem Prozess zugeordnet werden kann, verwenden Sie fortgeschrittene Tools. pidstat -u 1 zeigt den CPU-Verbrauch pro Prozess in Echtzeit (wenn das Paket sysstat installiert ist). sudo iotop zeigt Disk-I/O, und vmstat 1 gibt einen Überblick über die Systemressourcen. Für eine detaillierte CPU-Analyse verwenden Sie perf top (falls installiert) oder strace -p PID, um die Systemaufrufe des Prozesses zu sehen; strace kann den Prozess verlangsamen, verwenden Sie es daher nur kurz. Prüfen Sie außerdem, ob ein Hardwareproblem vorliegt (z. B. Überhitzung) mit sensors oder dmesg | grep -i error. Wenn Sie eine Kompromittierung vermuten, führen Sie als root rkhunter oder chkrootkit aus und überprüfen Sie Cron-Jobs: crontab -l zeigt nur die Aufgaben des aktuellen Benutzers; als root können Sie sudo crontab -l -u benutzer verwenden oder /etc/crontab, /etc/cron.* und /var/spool/cron überprüfen.

So beugen Sie vor

  • Aktualisieren Sie Software regelmäßig und verfolgen Sie Sicherheitspatches
  • Richten Sie Monitoring ein (z. B. `monit`, `netdata`) und Alarme für hohe Last
  • Konfigurieren Sie Ressourcenlimits für Dienste (systemd, PHP-FPM, Datenbank)
  • Überprüfen Sie Protokolle und analysieren Sie Lasttrends

Wann Sie einen Profi rufen sollten

Wenn Sie den Prozess nicht identifizieren können, eine Kompromittierung vermuten oder die Konfiguration kritischer Dienste geändert werden muss, wenden Sie sich an einen IT-Experten. Dieser kann die Ursache schnell isolieren und längere Ausfälle verhindern.

IT-Infrastruktur-Wartung · Server, Netzwerke, Backup, Sicherheit und Helpdesk

Häufige Fragen

Was bedeutet Load Average und welcher Wert ist akzeptabel?

Der Load Average zeigt die durchschnittliche Anzahl von Prozessen, die in den letzten 1, 5 und 15 Minuten auf CPU oder E/A warten. Als grobe Regel gilt: Akzeptabel ist ein Wert kleiner oder gleich der Anzahl der CPU-Kerne. Wenn er dauerhaft höher ist, kann das System überlastet sein.

Wie kann ich die Last vorübergehend reduzieren, ohne den Server neu zu starten?

Sie können den problematischen Dienst stoppen oder neu starten, vorübergehend eine CPU-Quote für den Prozess festlegen (z. B. `cpulimit`) oder nicht benötigte Dienste deaktivieren, wenn Sie sicher sind, dass sie nicht benötigt werden. Für einen schnellen Eingriff verwenden Sie `sudo kill -15 PID` auf den Prozess mit dem höchsten Verbrauch; `sudo kill -9 PID` nur als letzte Option und nicht bei Produktionsdatenbanken ohne vorherige Sicherung.

Ist hohe Last immer ein CPU-Problem?

Nein. Hohe Last kann durch eine langsame Festplatte (I/O-Wait), Speichermangel (Swap) oder eine große Anzahl von Prozessen in unvollendetem Zustand verursacht werden. Überprüfen Sie daher `vmstat`, `iostat` und `free -h`, bevor Sie die CPU als Ursache vermuten.

Teilen
Keine Lösung gefunden?Der KI-IT-Assistent ist rund um die Uhr erreichbar. Beschreiben Sie das Problem oder senden Sie einen Screenshot und erhalten Sie eine Anleitung für Ihren Fall.KI-IT-Assistent fragen