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.
・ 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.
Apache-2.0
JDK 6 ou supérieur Linux/Mac/Windows
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.
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
dashboard
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.
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.
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.
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.
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
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.
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