Arthas Java Diagnostic Tool

Was ist Arthas?

Arthas (Lesung: Arthas) ist ein Java-Diagnosetool, das von Alibaba als Open Source veröffentlicht wurde. In der Entwicklungsumgebung, Testumgebung und Produktionsumgebung können Sie den Status der JVM überwachen und einfach diagnostizieren, wenn ein Fehler auftritt, ohne die JVM zu löschen. jconsole jmap Es ist leistungsfähiger und einfacher zu verwenden als JDK-Tools wie jstack.

Welche Art von Problem kann gelöst werden?

・ Ich möchte überprüfen, aus welchem Jar diese Klasse geladen wird! Warum ist die Ausnahme aufgetreten? ・ Ich habe das Gefühl, dass der von mir festgeschriebene Code nicht ausgeführt wurde. .. .. Vergessen zu begehen? Haben Sie in der Branche einen Fehler gemacht? -Ich kann nicht online debuggen, daher muss ich Protokolle vorbereiten und erneut bereitstellen. -Es gab ein Problem mit der Datenverarbeitung eines Benutzers, der eine Produktion hat, aber es kann nicht in der Produktion debuggt und nicht lokal reproduziert werden! Was soll ich machen? ・ Wie ist die aktuelle Situation von JVM? ・ Ich möchte den Status von JVM in Echtzeit erfahren! ・ Ich möchte ein Flammendiagramm zeichnen, um einen Engpass zu finden! Ich denke, dass es in verschiedenen Szenen verwendet werden kann.

Lizenz

Apache-2.0

Umgebung

JDK 6 oder höher Linux/Mac/Windows

Installieren und ausführen

Linux-Umgebung:

wget https://alibaba.github.io/arthas/arthas-boot.jar


java -jar arthas-boot.jar

Wenn ein Java-Prozess ausgeführt wird, kann er gestartet werden. Wenn Sie einen bestimmten Java-Prozess überwachen möchten Überprüfen Sie den aktuell ausgeführten Prozess mit jps und übergeben Sie die PID als Parameter. Beispiel:

jps
341 Bootstrap

java -jar arthas-boot.jar 341

Der folgende Bildschirm wird angezeigt, und Sie können verschiedene arthas-Befehle wie eine Shell ausführen.

p1.jpg

Auf der offiziellen Website scheint es, dass der folgende Befehl es im aktuellen Pfad installiert und die ausführbare Datei automatisch als.sh generiert. Dies wird empfohlen, wenn Sie es normalerweise als Diagnosewerkzeug verwenden.

curl -L https://alibaba.github.io/arthas/install.sh | sh
./as.sh

Arthas Befehl

dashboard dashboard.png

Um ehrlich zu sein, bin ich ein wenig beeindruckt, ob ein solcher Bildschirm in einer Shell-Umgebung angezeigt werden kann. Oben befindet sich eine Liste der Threads, die sich derzeit in der JVM-Instanz befinden. Die linke Seite in der Mitte ist der Speicherstatus, die rechte Seite enthält GC-Informationen, die untere Seite enthält Informationen zum Betriebssystem, zur JVM-Version usw. Für Tomcat sehen Sie eine Übersicht über die Leistung.

thread

Sie können die Liste der Threads im aktuellen JVM-Prozess und deren Status anzeigen.

thread.png

Wenn Sie die Thread-Nummer angeben, kann außerdem die Stapelverfolgung angezeigt werden und Sie können sehen, welche Methode gestoppt ist.

thread1.png

jad

Sie können für die aktuell ausgeführte Klasse dekompilieren. Ich habe den Code behoben, um einen Fehler zu beheben, aber Sie können sehen, ob die reparierte Version wirklich funktioniert. Wenn Sie einen Fehler machen und beide verschiedenen Versionen desselben Jar-Moduls in den Klassenpfad aufnehmen, können Sie auch sehen, welche tatsächlich geladen ist.

jad1.jpg p2.jpg

redefine

Sie können eine externe .class-Datei laden und die Klasse in der aktuell ausgeführten JVM ersetzen. Einschränkungen: Neue Klassenfelder und neue Methoden sind nicht zulässig. Kann gewechselt werden. Ohne die JVM neu zu starten, ist es im Fall von Tomcat möglich, die Logik der Klasse zu ändern, ohne sie neu zu starten und neu zu laden. Oh ~

redefine /tmp/Test.class
redefine -c 327a647b /tmp/Test.class /tmp/Test\$Inner.class

sc

Zeigt Informationen zu den aktuell in die JVM geladenen Klassen an.

sc.png

stack

Überprüfen der festgefahrenen Spur

Beim Überprüfen des Stack-Trace von test.arthas.TestStack # doGet unten

stack.jpg

trace

Welche Methode ist langsamer? Es scheint, dass es für Engpässe und Leistungserhebungen verwendet werden kann.

trace.jpg

Andere

Es verfügt über eine Webkonsolenfunktion und kann arthas-Befehle im Web ausführen. Daher scheint es bei der Diagnose mehrerer Server hilfreich zu sein. Es gibt viele andere Befehle, die verwendet werden können, also für Details Bitte beziehen Sie sich hier. https://github.com/alibaba/arthas

Recommended Posts

Arthas Java Diagnostic Tool
Ich habe versucht, das Java-Diagnosetool Arthas zu verwenden
Java
[Verbesserung] Lernen Sie Java durch einfache Toolerstellung