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
Aktuelle Auslastung prüfen
Führen Sie
uptimeaus, 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
CPU-intensiven Prozess identifizieren
Führen Sie
topaus und drücken SieP, um nach CPU-Verbrauch zu sortieren. Achten Sie auf die Spalten%CPUundCOMMAND. Für eine übersichtlichere Anzeige installieren Siehtop(sudo apt install htopodersudo dnf install htop) und starten es. - 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 Sieps -p PID -o pid,ppid,cmd,%cpu,%mem. - 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
Anwendungsprotokolle analysieren
Überprüfen Sie die Protokolle des verdächtigen Dienstes:
journalctl -u dienstname -n 50oder Dateien in/var/log/. Suchen Sie nach Fehlern, wiederholten Meldungen oder unerwarteten Anfragen. - 6
Speicher und Swap prüfen
Führen Sie
free -hundvmstat 1 5aus. Wenn die Spaltensi/soansteigen (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
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 dienstnameodersudo kill -15 PID. Verwenden Siesudo kill -9 PIDnur 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
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 Siesudo systemctl daemon-reloadaus und starten den Dienst neu. Für PHP-FPM stellen Siepm.max_childrenein, für die Datenbankmax_connections. Konsultieren Sie die Dokumentation für die genauen Parameter. - 9
Prüfen, ob ein Angriff vorliegt
Überprüfen Sie die Zugriffsprotokolle des Webservers (
/var/log/nginx/access.logoder ä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 HelpdeskHä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.