Outil de diagnostic Arthas Java

Qu'est-ce que Arthas?

Arthas (lecture: Arthas) est un outil de diagnostic Java publié par Alibaba en tant que source ouverte. Dans l'environnement de développement, l'environnement de test et l'environnement de production, vous pouvez surveiller l'état de la JVM et diagnostiquer facilement en cas de panne sans abandonner la JVM. jconsole jmap Il est plus puissant et plus facile à utiliser que les outils JDK tels que jstack.

Quel genre de problème peut être résolu?

・ Je veux vérifier à partir de quel Jar cette classe est chargée! Pourquoi l'exception s'est-elle produite? ・ J'ai l'impression que le code que j'ai commis n'a pas été exécuté. .. .. Vous avez oublié de vous engager? Avez-vous fait une erreur dans la branche? -Je ne peux pas déboguer en ligne, donc je dois préparer des journaux et redéployer. -Il y a eu un problème avec le traitement des données d'un utilisateur qui a une production, mais il ne peut pas être débogué en production et ne peut pas être reproduit localement! Que devrais-je faire? ・ Quelle est la situation actuelle de JVM? ・ Je veux connaître l'état de JVM en temps réel! ・ Je veux dessiner un Flame Graph pour trouver un goulot d'étranglement! Je pense qu'il peut être utilisé dans diverses scènes.

Licence

Apache-2.0

environnement

JDK 6 ou supérieur Linux/Mac/Windows

Installer et exécuter

Environnement Linux:

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


java -jar arthas-boot.jar

Si un processus Java est en cours d'exécution, il peut être démarré. Si vous souhaitez surveiller un processus Java spécifique Vérifiez le processus en cours avec jps et transmettez le PID en tant que paramètre. Exemple:

jps
341 Bootstrap

java -jar arthas-boot.jar 341

L'écran suivant s'affiche et vous pouvez exécuter diverses commandes arthas comme un shell.

p1.jpg

Sur le site officiel, il semble que la commande suivante l'installera dans le chemin actuel et générera automatiquement le fichier exécutable as.sh. Ceci est recommandé si vous l'utilisez habituellement comme outil de diagnostic.

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

Commande Arthas

dashboard dashboard.png

Pour être honnête, je suis un peu impressionné si un tel écran peut être affiché dans un environnement shell. Le haut est la liste des threads actuellement dans l'instance JVM, le côté gauche au milieu est l'état de la mémoire, le côté droit est les informations GC, le bas est le système d'exploitation, les informations de version de la JVM, etc. Pour Tomcat, vous pouvez voir un aperçu des performances.

thread

Vous pouvez afficher la liste des threads dans le processus JVM actuel et leur état.

thread.png

De plus, si vous spécifiez le numéro de thread, la trace de la pile peut être affichée et vous pouvez voir quelle méthode est arrêtée.

thread1.png

jad

Vous pouvez décompiler pour la classe en cours d'exécution. J'ai corrigé le code pour corriger un bogue, mais vous pouvez voir si la version corrigée fonctionne vraiment. De plus, si vous faites une erreur et que vous récupérez les deux versions différentes du même module Jar dans le chemin de classe, vous pouvez voir laquelle est réellement chargée.

jad1.jpg p2.jpg

redefine

Vous pouvez charger un fichier .class externe et remplacer la classe dans la JVM en cours d'exécution. Restrictions: les nouveaux champs de classe et les nouvelles méthodes ne sont pas autorisés. Peut être changé. Sans redémarrer la JVM, dans le cas de Tomcat, il est possible de changer la logique de la classe sans redémarrer ni recharger. Oh ~

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

sc

Affiche des informations sur les classes actuellement chargées dans la JVM.

sc.png

stack

Vérification de la trace bloquée

Lors de la vérification de la trace de pile de test.arthas.TestStack # doGet ci-dessous

stack.jpg

trace

Quelle méthode est la plus lente? Il semble qu'il puisse être utilisé pour les goulots d'étranglement et les enquêtes de performance.

trace.jpg

Autre

Il a une fonction de console Web et peut exécuter des commandes arthas sur le Web, il semble donc être utile lors du diagnostic de plusieurs serveurs. Il existe de nombreuses autres commandes qui peuvent être utilisées, donc pour plus de détails Veuillez vous référer ici. https://github.com/alibaba/arthas

Recommended Posts

Outil de diagnostic Arthas Java
J'ai essayé d'utiliser l'outil de diagnostic Java Arthas
Java
[Amélioration] Apprenez Java grâce à la création d'outils simples