Überwachung der CPU-Auslastung unter Linux
Die Überwachung der CPU-Auslastung ist entscheidend für die Gewährleistung einer optimalen Systemleistung und die Identifizierung potenzieller Engpässe. Unter Linux stehen dir verschiedene Tools zur Verfügung, um die CPU-Auslastung in Echtzeit und historisch zu überwachen.
Echtzeitüberwachung
Für die Echtzeitüberwachung kannst du die folgenden Tools verwenden:
- Top: Zeigt eine dynamische Ansicht der ressourcenintensivsten Prozesse an, einschließlich der CPU-Auslastung.
- Htop: Eine interaktive Textmodus-Anwendung, die eine visuelle Darstellung der CPU-Auslastung sowie detaillierte Informationen zu Prozessen bietet.
Diese Tools ermöglichen es dir, die CPU-Auslastung einzelner Kerne und Prozesse zu überwachen und zu identifizieren, welche Aufgaben die meisten Ressourcen verbrauchen.
Überwachung historischer Daten
Um historische Daten zur CPU-Auslastung zu überwachen, kannst du das Sar-Tool (System Activity Reporter) verwenden. Sar zeichnet Systemmetriken wie CPU-Auslastung, Speichernutzung und E/A-Aktivität auf und ermöglicht es dir, Trends und Muster zu analysieren. Mit Sar kannst du:
- CPU-Auslastungswerte über einen bestimmten Zeitraum aufzeichnen
- Die durchschnittliche CPU-Auslastung im Zeitverlauf anzeigen
- Spitzenwerte der CPU-Auslastung identifizieren
Verwendung von Top und Htop zur Echtzeitüberwachung
Die Tools top
und htop
bieten umfassende Echtzeitinformationen zur CPU-Auslastung und anderen Systemressourcen.
Top
top
ist ein textbasiertes Tool, das eine Echtzeitansicht der laufenden Prozesse anzeigt. Die folgende Kommandozeile startet top
:
top
Die Ausgabe von top
ist in mehrere Abschnitte unterteilt, darunter:
- Systeminformationen: Zeigt die Gesamt-CPU-Auslastung, den Speichernutzung, den Uptime und andere Systemmetriken an.
- Aufgabenliste: Zeigt eine Liste laufender Prozesse an, sortiert nach CPU-Auslastung.
- Zusammenfassung der Prozesse: Zeigt eine Zusammenfassung der Anzahl der Prozesse, des Thread-Zustands und anderer Metriken an.
Htop
htop
ist ein interaktives textbasiertes Tool, das eine grafischere und benutzerfreundlichere Oberfläche als top
bietet. Die folgende Kommandozeile startet htop
:
htop
Die Ausgabe von htop
enthält ähnliche Informationen wie top
, wird aber in einer benutzerfreundlicheren Form dargestellt, mit:
- Navigationsbaum: Ermöglicht dir, durch die Prozesse zu navigieren und nach ihnen zu suchen.
- Prozessliste: Zeigt eine Liste laufender Prozesse an, farblich codiert nach CPU- und Speichernutzung.
-
Systeminformationen: Zeigt ähnliche Systemmetriken wie
top
an.
Echtzeitüberwachung mit Top und Htop
Verwende die folgenden Tastenkombinationen, um top
und htop
effektiv für die Echtzeitüberwachung zu verwenden:
- h (top/htop): Wechselt zwischen Prozessor-, Speicher- und Aufgabensicht.
- F (top/htop): Filtert die Liste der Prozesse.
- t (htop): Sortiert die Prozesse nach CPU-Zeit.
- M (htop): Sortiert die Prozesse nach Arbeitsspeicher.
Durch die Überwachung der CPU-Auslastung mit top
oder htop
kannst du ressourcenintensive Prozesse schnell identifizieren und Maßnahmen ergreifen, um sie zu optimieren.
Überwachung historischer Daten mit Sar
Neben der Echtzeitüberwachung kannst du auch historische CPU-Auslastungsdaten überwachen, um Trends und vergangene Leistung zu analysieren. Hier kommt das Tool "sar" (System Activity Reporter) ins Spiel.
Was ist sar?
Sar ist ein leistungsstarkes Befehlszeilentool zur Überwachung der Systemaktivität, einschließlich CPU-Auslastung, Speicherauslastung, E/A-Verhalten und Netzwerkaktivität. Es sammelt Daten über einen bestimmten Zeitraum und speichert sie in einer Datei oder gibt sie auf dem Terminal aus.
So verwendest du sar zur Überwachung der CPU-Auslastung
Führe den Befehl sar
ohne Argumente aus, um eine Übersicht über die Systemressourcennutzung zu erhalten, einschließlich CPU-Auslastung. Die Ausgabe enthält mehrere Spalten, die verschiedene Metriken darstellen, z. B.:
-
%user
: Prozentsatz der CPU-Zeit, die für Benutzerprozesse aufgewendet wird -
%nice
: Prozentsatz der CPU-Zeit, die für Prozesse mit niedriger Priorität aufgewendet wird -
%system
: Prozentsatz der CPU-Zeit, die für Kernelprozesse aufgewendet wird -
%iowait
: Prozentsatz der CPU-Zeit, die darauf wartet, dass E/A-Anforderungen abgeschlossen werden -
%idle
: Prozentsatz der CPU-Zeit, die inaktiv ist
Daten über einen Zeitraum sammeln
Um Daten über einen bestimmten Zeitraum zu sammeln, verwende die Option -u
:
sar -u 10 > cpu_usage.log
Dieser Befehl sammelt CPU-Nutzungsdaten im Sekundentakt und speichert sie in der Datei "cpu_usage.log". Die Zahl "10" gibt die Häufigkeit der Datenerfassung in Sekunden an.
Historische Daten anzeigen
Um die gesammelten Daten anzuzeigen, verwende die Option -f
:
sar -f cpu_usage.log
Die Ausgabe zeigt die gleichen Metriken wie die Echtzeitüberwachung, aber über den gesamten Zeitraum, in dem die Daten gesammelt wurden.
Zusätzliche Optionen
Sar bietet zahlreiche zusätzliche Optionen zur Anpassung der Datenerfassung und -ausgabe. Einige nützliche Optionen sind:
-
-A
: Zeigt alle verfügbaren Metriken an -
-r
: Zeigt CPU-Auslastungsinformationen pro CPU an (für Multi-Core-Systeme) -
-P
: Zeigt Informationen zur Prozessorauslastung pro Partition an (für partitionierte Systeme)
Identifizierung ressourcenintensiver Prozesse
Die Identifizierung ressourcenintensiver Prozesse ist entscheidend für die Optimierung der CPU-Auslastung unter Linux. Hier sind einige Methoden zur Lokalisierung dieser Prozesse:
Verwendung von Top
Der Befehl top
bietet eine Echtzeitübersicht über die laufenden Prozesse auf deinem System. Die Spalte "%CPU" zeigt den Prozentsatz der CPU-Zeit, die von jedem Prozess verwendet wird. Sortiere die Prozesse nach dieser Spalte, um die ressourcenintensivsten Prozesse zu finden.
Verwendung von Htop
Htop
ist eine interaktive Version von top
, die eine visuelle Darstellung der Prozessauslastung bietet. Es verwendet eine Baumstruktur, um Prozesse anzuzeigen, sodass du verschachtelte Prozesse leicht identifizieren kannst. Drücke die Taste "F6", um Prozesse nach CPU-Auslastung zu sortieren.
Verwendung von Ps
Der Befehl ps
listet laufende Prozesse auf. Die Option aux
liefert erweiterte Informationen, einschließlich der Spalten "%CPU" und "%MEM". Verwende den Filter | sort -rn -k 3
, um Prozesse nach CPU-Auslastung zu sortieren.
Auslastung des Kernels
Ressourcenintensive Prozesse können auch durch den Kernel verursacht werden. Verwende top -H
oder htop -S kernel
, um Kernel-Thread-Informationen anzuzeigen und mögliche Probleme zu identifizieren.
Werkzeuge von Drittanbietern
Einige Tools von Drittanbietern wie sysstat
und atop
bieten erweiterte Überwachungsfunktionen, einschließlich historischer Daten und Benachrichtigungen für ressourcenintensive Prozesse.
Optimierung der CPU-Auslastung
Nachdem du deine CPU-Auslastung überwacht und die ressourcenintensiven Prozesse identifiziert hast, kannst du Schritte unternehmen, um die Nutzung zu optimieren.
Anpassen von Prozessprioritäten
- Verwende den nice-Befehl, um die Priorität von Prozessen anzupassen. Prozesse mit einer niedrigeren Priorität werden weniger CPU-Zeit zugewiesen.
- Priorisiere wichtige Prozesse höher, um ihre Leistung zu verbessern, z.B.:
nice -10 /usr/bin/webserver
Feinabstimmung von Kernelparametern
- Passe Kernelparameter an, um das CPU-Scheduling zu optimieren. Die folgenden Parameter sind besonders relevant:
- sched_latency_ns: Beeinflusst die Reaktionsfähigkeit des Systems auf Interrupts.
- sched_min_granularity_ns: Legt die minimale Zeitdauer fest, die ein Prozess auf dem Prozessor ausgeführt werden kann.
- sched_tunable_scaling: Steuert die Skalierung von Kernelparametern je nach Systemlast.
Deaktivieren unnötiger Dienste und Prozesse
- Identifiziere Dienste und Prozesse, die nicht benötigt werden, und deaktiviere sie. Dies kann über Systemkonfigurationstools oder Befehlszeilenbefehle wie:
systemctl disable [Dienstname]
Tipps zur Optimierung spezifischer Anwendungen
- Überprüfe die Dokumentation spezifischer Anwendungen auf Tipps zur Optimierung der CPU-Auslastung. Zum Beispiel:
- Datenbanken: Indizes korrekt verwenden und Abfragen optimieren.
- Webserver: Caching und Lastausgleich implementieren.
- Videospiele: Grafikeinstellungen reduzieren oder die Auflösung verringern.
Anpassen von Prozessprioritäten
Prozesse in Linux haben eine Prioritätsstufe zugewiesen, die bestimmt, wie viel Prozessorzeit sie erhalten. Du kannst die Priorität von Prozessen anpassen, um die Gesamtleistung deines Systems zu optimieren.
Verständnis von Prozessprioritäten
Die Priorität eines Prozesses wird durch eine Zahl zwischen -20 (niedrigste Priorität) und 19 (höchste Priorität) dargestellt. Ein niedrigerer Wert bedeutet eine niedrigere Priorität und umgekehrt.
Verwendung von Renice zum Ändern von Prozessprioritäten
Der renice
-Befehl ist ein nützliches Tool zum Ändern der Priorität eines laufenden Prozesses. Die Syntax des Befehls lautet wie folgt:
renice <Priorität> <PID>
Wobei:
-
<Priorität>
die gewünschte Priorität des Prozesses ist (zwischen -20 und 19) -
<PID>
die Prozess-ID des Prozesses ist, den du ändern möchtest
Beispiel:
Um die Priorität eines Prozesses mit der PID 1234 auf eine niedrigere Priorität von 10 zu ändern, würdest du folgenden Befehl ausführen:
renice 10 1234
Überwachung von Prozessprioritäten
Du kannst den ps
-Befehl mit der Option -l
verwenden, um die Priorität laufender Prozesse anzuzeigen.
Beispiel:
ps -l
Dies würde eine Liste aller laufenden Prozesse zusammen mit ihrer Priorität anzeigen.
Tipps zur Optimierung der Prozessprioritäten
- Gib ressourcenintensiven Prozessen eine höhere Priorität: Prozesse, die eine hohe CPU-Auslastung verursachen, können von einer höheren Priorität profitieren, damit sie schneller ausgeführt werden.
- Gib interaktiven Prozessen eine höhere Priorität: Prozesse, die mit dem Benutzer interagieren, wie z. B. Terminals oder GUI-Anwendungen, können von einer höheren Priorität profitieren, um die Reaktionsfähigkeit zu verbessern.
- Gib Hintergrundprozessen eine niedrigere Priorität: Prozesse, die im Hintergrund laufen und nicht unbedingt eine hohe Priorität haben, können auf eine niedrigere Priorität gesetzt werden, um Ressourcen für wichtigere Prozesse freizugeben.
- Sei vorsichtig bei der Änderung von Systemprozessen: Die Priorität von Systemprozessen sollte nicht ohne sorgfältige Überlegung geändert werden, da dies das System instabil machen könnte.
Feinabstimmung von Kernelparametern
Die Feinabstimmung von Kernelparametern bietet eine weitere Ebene der CPU-Optimierung. Diese Parameter steuern das Verhalten des Linux-Kernels und können die Leistung deines Systems erheblich verbessern.
Optimierung der CPU-Planung
Der Kernel verwendet einen CPU-Scheduler, um zu bestimmen, welcher Prozess als nächstes ausgeführt wird. Du kannst verschiedene Planer ausprobieren, um die für deine Workloads am besten geeignete Option zu finden. Einige gängige Optionen sind:
- Completely Fair Scheduler (CFS): Der Standardplaner, der jedem Prozess eine faire Zuweisung der CPU-Zeit garantiert.
- SCHED_DEADLINE: Stellt sicher, dass Prozesse innerhalb eines bestimmten Zeitrahmens ausgeführt werden, was für Echtzeitaufgaben wichtig ist.
- SCHED_OTHER: Ein Planer mit niedriger Priorität, der für Hintergrundprozesse verwendet wird.
Du kannst den aktuellen Planer mit dem Befehl cat /sys/kernel/sched/schedulers
anzeigen und ändern mit echo scheduler > /sys/kernel/sched/scheduler
.
Anpassung der Skalierungsparameter
Der Kernel skaliert die CPU-Frequenz dynamisch, um Strom zu sparen und die Leistung zu optimieren. Du kannst diese Skalierungsparameter anpassen, um die Leistung zu verbessern:
-
cpupower governor: Dieser Parameter steuert die Skalierungsrichtlinie des Prozessors. Gängige Optionen sind "
performance
", "powersave
" und "ondemand
". - cpupower frequency settings: Du kannst die minimalen und maximalen CPU-Frequenzen einstellen, um die Leistung für bestimmte Workloads zu optimieren.
Du kannst diese Parameter mit dem Befehl cpupower
ändern. Weitere Informationen findest du auf der CPU Power Management-Dokumentationsseite.
Optimierung der Speicherverwaltung
Die Speicherverwaltung kann sich ebenfalls auf die CPU-Auslastung auswirken. Die folgenden Parameter können optimiert werden:
- vm.swappiness: Dieser Parameter bestimmt, wie aggressiv der Kernel den Swap-Speicher verwendet. Ein niedrigerer Wert verringert die CPU-Auslastung, kann aber zu Leistungseinbußen führen.
- vm.vfs_cache_pressure: Dieser Parameter steuert den Druck auf den Seitencache, dem Teil des Speichers, der zum Zwischenspeichern von Dateisystemdaten verwendet wird. Ein niedrigerer Wert verringert die CPU-Auslastung, kann aber die Leistung von E/A-intensiven Workloads beeinträchtigen.
Du kannst diese Parameter in der Datei /etc/sysctl.conf
bearbeiten oder mit dem Befehl sysctl
festlegen.
Deaktivieren unnötiger Dienste und Prozesse
Deine CPU-Auslastung kann durch Hintergrunddienste und -prozesse in die Höhe getrieben werden, die du gar nicht verwendest. Diese unnötigen Ressourcenfresser zu identifizieren und zu deaktivieren, ist ein effektiver Weg, die CPU-Leistung zu optimieren.
Dienste deaktivieren
Um Dienste zu deaktivieren, die du nicht brauchst, kannst du die folgenden Befehle verwenden:
-
systemctl disable
: Deaktiviert einen Dienst dauerhaft. -
systemctl stop
: Beendet einen Dienst sofort.
Beispiel für die Deaktivierung des Bluetooth-Dienstes:
sudo systemctl disable bluetooth
Prozesse beenden
Manchmal laufen Prozesse im Hintergrund, die du nicht gestartet hast und die deine CPU-Ressourcen belasten. Um diese Prozesse zu beenden, kannst du den folgenden Befehl verwenden:
ps aux | grep <process-name>
Dieser Befehl listet alle Prozesse auf, die mit dem angegebenen Namen übereinstimmen. Du kannst dann den Prozess mit der PID-Nummer (Process ID) beenden:
kill <pid-number>
Autostart-Programme deaktivieren
Einige Programme werden beim Systemstart automatisch gestartet und können deine CPU unnötig belasten. Du kannst diese Programme mit den folgenden Schritten deaktivieren:
- Öffne das Menü "Systemsteuerung" oder "Einstellungen".
- Suche nach "Anwendungen" oder "Startprogramme".
- Deaktiviere alle Programme, die du nicht beim Systemstart laden möchtest.
Tipps zur Optimierung spezifischer Anwendungen
Bestimmte Anwendungen können deine CPU übermäßig belasten. Hier sind einige Tipps für die Optimierung spezifischer Anwendungen:
- Webbrowser: Verwende einen leichten Browser wie Opera oder Brave.
- Videospiele: Reduziere die Grafikeinstellungen und schließe Hintergrundanwendungen.
- Datenbanken: Optimiere Datenbankabfragen und verwende Indizes, um die Leistung zu verbessern.
Indem du unnötige Dienste und Prozesse deaktivierst, kannst du die CPU-Auslastung verringern und die Leistung deines Linux-Systems erheblich verbessern.
Tipps zur Optimierung spezifischer Anwendungen
Um die CPU-Auslastung für bestimmte Anwendungen zu optimieren, kannst du die folgenden Schritte unternehmen:
Datenbankmanagementsysteme (DBMS)
- Indizes optimieren: Erstelle Indizes für häufig abgefragte Spalten.
- Abfragen optimieren: Verwende SQL-Tuner, um langsame Abfragen zu identifizieren und zu optimieren.
- Datenbankressourcen zuweisen: Weise dem DBMS dedizierte CPU-Kerne und Arbeitsspeicher zu.
Webserver
- Cache konfigurieren: Aktiviere Caching, um häufig angeforderte Inhalte im Speicher zu speichern.
- Komprimierung aktivieren: Aktiviere die Komprimierung von Antworten, um die Bandbreitennutzung zu reduzieren.
- HTTP/2 verwenden: Implementiere HTTP/2 für verbesserte Leistung und Sicherheit.
Cloud-Computing-Plattformen
- Instanzentyp wählen: Wähle einen Instanzentyp mit ausreichend CPU-Kernen und Arbeitsspeicher, um die Anwendung zu unterstützen.
- Auto-Scaling aktivieren: Richte die automatische Skalierung ein, um die Kapazität bei Bedarf zu erhöhen.
- Cloud-basierte Dienste nutzen: Nutze managed Services wie Datenbanken und Memcache, um die CPU-Auslastung zu reduzieren.
Virtualisierungsumgebungen
- VM-Ressourcen zuweisen: Weise VMs dedizierte CPU-Kerne und Arbeitsspeicher zu.
- Hypervisor-Einstellungen optimieren: Passe Hypervisor-Einstellungen an, um die CPU-Leistung zu verbessern.
- Live-Migration nutzen: Verwende Live-Migration, um VMs ohne Ausfallzeiten zu migrieren.
Containerisierungsplattformen
- Container-Image optimieren: Entferne unnötige Abhängigkeiten und optimiere den Code in Container-Images.
- Ressourcenlimits festlegen: Setze Ressourcenlimits für Container, um die CPU-Auslastung zu verwalten.
- Container-Orchestrierung nutzen: Verwende Container-Orchestrierungswerkzeuge wie Kubernetes, um Container automatisch zu verwalten und zu skalieren.
Denke daran, dass die Optimierung spezifischer Anwendungen ein iterativer Prozess ist. Überwache die CPU-Auslastung regelmäßig und nimm gegebenenfalls weitere Anpassungen vor.