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.
・ 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.
Apache-2.0
JDK 6 oder höher Linux/Mac/Windows
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.
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
dashboard
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.
Wenn Sie die Thread-Nummer angeben, kann außerdem die Stapelverfolgung angezeigt werden und Sie können sehen, welche Methode gestoppt ist.
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.
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.
stack
Überprüfen der festgefahrenen Spur
Beim Überprüfen des Stack-Trace von test.arthas.TestStack # doGet unten
trace
Welche Methode ist langsamer? Es scheint, dass es für Engpässe und Leistungserhebungen verwendet werden kann.
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