Hintergrund
Bei der Entwicklung von Projekten stoßen Sie häufig auf die folgenden Szenarien:
- Aus welchem JAR-Paket wird diese Klasse geladen? Warum werden verschiedene Arten von Ausnahmen gemeldet?
- Warum wird der von mir geänderte Code nicht ausgeführt? Könnte es sein, dass ich mich nicht verpflichtet habe? Falsche Filiale?
- Wenn Sie auf ein Problem stoßen und es nicht online debuggen können, können Sie dann nur Protokolle hinzufügen und es erneut veröffentlichen?
- Es liegt ein Problem mit der Online-Datenverarbeitung eines Benutzers vor, das jedoch nicht online debuggt und nicht offline reproduziert werden kann!
- Gibt es eine globale Sicht auf die Leistung des Systems?
- Gibt es eine Möglichkeit, den Echtzeit-Laufstatus der JVM zu überwachen?
- Wie kann man Anwendungs-Hotspots schnell lokalisieren und Flammendiagramme erstellen?
- Wie finde ich eine Instanz einer Klasse direkt in der JVM?
Zu diesem Zeitpunkt können wir Arthas verwenden, um das oben genannte Problem zu lösen.
Offizielle Dokumentation von Arthas: Arthas-Gebrauchsanweisung
Installieren
Da Arthas ein von Spring Boot geschriebenes Projekt ist, müssen wir bei der Installation und Verwendung nur das entsprechende JAR-Paket herunterladen und dann das Projekt mit java -jar ausführen.
curl -O https://arthas.aliyun.com/arthas-boot.jar
Wenn wir das obige JAR-Paket ausführen, müssen wir zuerst einen Java-Prozess im Speicher ausführen, andernfalls tritt die Fehlermeldung auf, dass der Java-Prozess nicht gefunden werden kann [!!#ff0000 Sie können jps verwenden, um die auf dem System ausgeführten Prozesse anzuzeigen!! ]
java -jar arthas-boot.jar
Einfach zu benutzen
1. Thread
Verwenden Sie den Thread-Befehl, um die Thread-Stack-Informationen der aktuellen JVM anzuzeigen.
Sie müssen den Befehl mit Parametern verwenden, die später gespleißt werden können.
Parametername | Parameterbeschreibung |
---|---|
Nummer | Thread-ID |
[N:] | Finden Sie die N-Threads mit der höchsten Auslastung und drucken Sie den Stapel |
[B] | Suchen Sie den Thread, der derzeit andere Threads blockiert |
[ich] | Geben Sie das Abtastintervall für die CPU-Verhältnisstatistik in Millisekunden an |
thred -n 3
thread -b
2. jad
Wenn wir wissen möchten, ob eine Online-Filiale über einen eigenen Code verfügt, können wir ihn mit dem Befehl jad dekompilieren
jad 类全路径名
3. Überwachen
Funktion: Überwachen Sie die Ausführung von Methoden in der angegebenen Klasse.
Rufen Sie bei Klassen, die mit Klassenmuster/Methodenmuster übereinstimmen, wiederholt den Monitor auf. Der
Monitorbefehl ist ein nicht in Echtzeit erfolgender Rückgabebefehl. Er wartet kontinuierlich auf den Ziel-Java-Prozess Geben Sie Informationen zurück, bis der Benutzer Strg + C eingibt
monitor 类全路径名 方法名 -n 监控次数 --cycle 间隔采样的时间[单位s]
4. Beobachten
Beobachten Sie den Aufrufstatus der angegebenen Methode.
Mit Regeln für Methodenausführungsdaten können Sie den Aufrufstatus der angegebenen Methode einfach beobachten.
Der Beobachtungsbereich umfasst: Rückgabewert, Auslösen von Ausnahmen, Eingeben von Parametern und Anzeigen von Variablen durch Schreiben von ONGL-Ausdrücken.
watch 类名 方法名 '{params,returnObj,throwExp}' -n 5 -x 3
„{params,returnObj,throwExp}“ ist hier eine Art sogenannter ognl-Ausdruck, der die Notwendigkeit angibt, Parameter auszugeben, Werte zurückzugeben und Ausnahmen auszulösen
5. Spur
Trace dient dazu, den Aufrufpfad innerhalb der Methode zu verfolgen und den Zeitverbrauch jedes Knotens auf dem Methodenpfad auszugeben.
Parameterbeschreibung
Parametername | Parameterbeschreibung |
---|---|
Klassenmuster | Klassennamenausdruck |
Methodenmuster | Methodennamenausdruck |
Zustand-Express | Bedingter Ausdruck, standardmäßig ist die Wildcard-Übereinstimmung |
[E] | Aktivieren Sie den Abgleich mit regulären Ausdrücken. Der Standardwert ist der Platzhalterabgleich. |
[N:] | Legen Sie die Anzahl der Befehlsausführungszeiten fest |
#kosten | Methodenausführungszeit, Einheit ist Millisekunden |
trace 类名 方法名 调用次数 限制条件
Eine kurze Einführung in das Arthas Idea-Plug-in
Das Obige stellt kurz einige allgemeine Befehle von Arthas vor. Während der normalen Entwicklung können wir einige Compiler-Plug-Ins vollständig verwenden, ohne Befehle manuell eingeben zu müssen.
Einfache Verwendung
Nachdem wir das Plug-in aktiviert haben, können wir es mit einigen gängigen Befehlen ändern