Ideen und Lösungen zur Fehlerbehebung bei hoher CPU-Auslastung in Linux-Systemen

Ideen und Lösungen zur Fehlerbehebung bei hoher CPU-Auslastung in Linux-Systemen

Vorwort

Als Linux-Betriebs- und Wartungsingenieure können wir in unserer täglichen Arbeit auf Situationen stoßen, in denen die CPU-Auslastung auf Linux-Servern 100 % erreicht und hoch bleibt. Wenn die CPU weiterhin hoch ausgelastet ist, beeinträchtigt dies den normalen Betrieb des Geschäftssystems und verursacht Verluste für das Unternehmen.


Viele Betriebs- und Wartungsmitarbeiter sind bei dieser Situation oft ratlos. Bei CPU-Überlastungsproblemen können die folgenden zwei Methoden normalerweise verwendet werden, um sie schnell zu lokalisieren:

Methode 1

Schritt 1: Verwenden

top-Befehl, dann Umschalt+P drücken, um nach CPU zu sortieren

Finden Sie die PID des Prozesses, der zu viel CPU verwendet

Schritt 2: Verwenden

top -H -p [Prozess-ID]

Suchen Sie die ID des Threads, der im Prozess die meisten Ressourcen verbraucht

Schritt 3: Verwenden

echo 'obase=16;[Thread-ID]' | bc oder printf "%x\n" [Thread-ID]

Konvertieren Sie die Thread-ID in eine Hexadezimalzahl (Buchstaben sollten klein geschrieben sein).

bc ist der Taschenrechnerbefehl in Linux

Schritt 4: Ausführung

jstack [Prozess-ID] |grep -A 10 [Thread-ID in Hexadezimal]"

Informationen zum Thread-Status anzeigen

Methode 2

Schritt 1: Verwenden

top-Befehl, dann Umschalt+P drücken, um nach CPU zu sortieren

Finden Sie den Prozess, der zu viel CPU verwendet

Schritt 2: Verwenden

ps -mp pid -o THREAD,tid,zeit | sort -rn

Erhalten Sie Thread-Informationen und finden Sie Threads, die viel CPU verbrauchen

Schritt 3: Verwenden

echo 'obase=16;[Thread-ID]' | bc oder printf "%x\n" [Thread-ID]

Konvertieren Sie die erforderliche Thread-ID in das Hexadezimalformat

Schritt 4: Verwenden

jstack pid |grep tid -A 30 [Hexadezimalzahl der Thread-ID]

Drucken von Thread-Stack-Informationen

Fallstudie

Szenariobeschreibung

Fehlerbehebung bei hoher CPU-Auslastung von JAVA-Prozessen in Produktionsumgebungen

Lösungsprozess

1. Gemäß dem Top-Befehl wird festgestellt, dass der Java-Prozess mit PID 2633 bis zu 300 % der CPU belegt und ein Fehler auftritt.

2. Wie kann man nach dem Auffinden des Prozesses den spezifischen Thread oder Code lokalisieren? Zeigen Sie zunächst die Thread-Liste an und sortieren Sie sie nach den Threads mit hoher CPU-Auslastung:

[root@localhost ~]# ps -mp 2633 -o THREAD,tid,time | sort -rn

Die Ergebnisse sind wie folgt:


Es wurde der Thread (TID) 3626 mit dem höchsten CPU-Verbrauch gefunden, der 12 Minuten lang die CPU-Zeit beansprucht hat!

3. Konvertieren Sie die erforderliche Thread-TID in das Hexadezimalformat

[root@localhost ~]# printf "%x\n" 3626
e18

4. Verwenden Sie abschließend den Befehl jstack, um die Stapelinformationen dieses Threads während des Prozesses auszudrucken:

[root@localhost ~]# jstack 2633 |grep "e18" -A 30

Im Vergleich zur Fehlersuche ist die Fehlersuche ebenso wichtig! Die meisten Überwachungssoftwareprogramme auf dem Markt ermöglichen eine Echtzeitüberwachung der Serverauslastung, beispielsweise Zabbix, Nagios, Alibaba Cloud Monitoring (für Cloud-Server) usw. Für die meisten Softwareprogramme ist jedoch erforderlich, dass Betriebs- und Wartungspersonal aktiv Regeln festlegt oder Tests durchführt, um Probleme zu erkennen. Wie können wir passiv Warnmeldungen erhalten?

Ich möchte Ihnen eine praktische Betriebs- und Wartungssoftware empfehlen – Professor Wang. Für Benutzer, deren Unternehmen auf Alibaba Cloud bereitgestellt sind, müssen sie nur den schreibgeschützten AcessKey binden, der überwacht werden muss, um die entsprechenden Teammitglieder umgehend über die Alarminformationen der Cloud-Ressourcen zu benachrichtigen.

Der Wechsel vom aktiven zum passiven Ansatz reduziert einerseits die Arbeitsbelastung der Betriebs- und Wartungstechniker und verringert andererseits die Wahrscheinlichkeit, dass Betriebs- und Wartungstechniker Alarme übersehen oder ignorieren.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung der Linux-CPU-Last und CPU-Auslastung
  • Detaillierte Erläuterung des Prozesses zur Behebung der Ursache für hohe CPU-Auslastung unter Linux

<<:  Detaillierte Erläuterung der benutzerdefinierten Vue-Anweisungen und ihrer Verwendung

>>:  Zusammenfassung des Installationsprozesses von MySql 8.0.11 und der beim Verknüpfen mit Navicat aufgetretenen Probleme

Artikel empfehlen

So verwenden Sie den VIM-Editor unter Linux

Als leistungsstarker Editor mit umfangreichen Opt...

Wozu dient das Feld „enctype“ beim Hochladen von Dateien?

Das enctype-Attribut des FORM-Elements gibt den Ko...

Zabbix-Konfiguration DingTalk-Alarmfunktions-Implementierungscode

brauchen Das Konfigurieren von DingTalk-Alarmen i...

So ändern Sie die Zeitzone und die Uhrzeit im Ubuntu-System

Auf einem Linux-Computer gibt es zwei Zeitzonen: ...

Redo-Dateiwartungsmethode der InnoDB-Engine

Wenn Sie die Größe und Anzahl der InnoDB-Redo-Log...

Allgemeine Benennungsregeln für CSS-Klassen und IDs

Öffentlicher Name der Seite: #wrapper - - Der äuß...

So konfigurieren Sie MySQL8 in Nacos

1. Erstellen Sie die MySQL-Datenbank nacos_config...

Verwendung des optionalen Verkettungsoperators von JS

Vorwort Der optionale Verkettungsoperator (?.) er...

Verhindern von SQL-Injection in Webprojekten

Inhaltsverzeichnis 1. Einführung in SQL-Injection...

Schritte zur Installation von MySQL 8.0.23 unter Centos7 (Anfängerstufe)

Lassen Sie mich zunächst kurz erklären, was MySQL...