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

Native JS-Implementierung der Lupenkomponente

In diesem Artikelbeispiel wird der spezifische Co...

Führen Sie die Schritte aus, um schnell ein Vue3.0-Projekt zu erstellen

Inhaltsverzeichnis 1. Wir müssen sicherstellen, d...

Centos7-Installation des in Nginx integrierten Lua-Beispielcodes

Vorwort Der von mir verwendete Computer ist ein M...

Zusammenfassung der Anwendungsbereiche von Kubernetes

Kubernetes ist aufgrund seiner Anwendungsportabil...

Das WeChat-Applet realisiert den Effekt des Siebschüttelns

In diesem Artikel wird der spezifische Code des W...

Eine kurze Diskussion über zwei Strombegrenzungsmethoden in Nginx

Die Belastung wird im Allgemeinen während des Sys...

So implementieren Sie die Navigationsfunktion im WeChat Mini-Programm

1. Rendern2. Bedienungsschritte 1. Beantragen Sie...

Detaillierte Verwendung von Echarts in vue2 vue3

Inhaltsverzeichnis 1. Installation 2. Verwenden S...

So legen Sie einen Alias ​​für einen benutzerdefinierten Pfad in Vue fest

So konfigurieren Sie benutzerdefinierte Pfadalias...

Ein einfaches Tutorial zur Verwendung des MySQL-Protokollsystems

Inhaltsverzeichnis Vorwort 1. Fehlerprotokoll 2. ...