[JAVA] L'outil de dépannage open source d'Alibaba "Archas"

Cet article vous donne un aperçu et les principales fonctionnalités de l'outil de dépannage open source ** d'Alibaba ** «Archas» **, et comment commencer dès aujourd'hui.

Quelles sont toutes les fonctionnalités d'Arthas?

Au moment de la rédaction de cet article, il s'agit de la Version 3.1.1, mais la version actuelle Jetons un coup d'œil aux principales caractéristiques d'Arthas. Arthas peut:

--Vérifier si la classe est chargée

Installez et exécutez Arthas

Arthas fonctionne sur la plupart des principaux systèmes d'exploitation, y compris Linux, MacOS et Windows. Avant de commencer à configurer Arthas, vous devez vous assurer que Java Virtual Machine 6 ou version ultérieure est installé sur votre système. D'une manière générale, Arthas se compose d'un seul fichier Jar exécutable et est un runner Arthas arthas-boot. Il est nommé? Spm = a2c65.11461447.0.0.26773774iloTj8 & file = arthas-boot.jar).

Pour télécharger arthas-boost, utilisez la commande suivante.

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

Après cela, gérez Arthas avec la commande suivante.

--Exécution: java -jar arthas-boot.jar

Comment utiliser les commandes Arthas et Arthas

À partir de la commande d'aide Arthas (-h), vous pouvez voir qu'il existe de nombreuses options pour activer ou traiter certaines fonctionnalités de l'outil de diagnostic. Voici quelques options intéressantes que vous pourriez utiliser le plus souvent.

---- target-IP: Si la machine virtuelle Java cible se trouve à une adresse IP spécifique sur le réseau, la valeur par défaut est 127.0.0.0.1 (hôte local). ---- telnet-port: la machine virtuelle Java cible écoute le port telnet. Le port par défaut est 3658. ---- http-port: Le port HTTP à écouter pour la machine virtuelle Java cible. Le port HTTP sur lequel la machine virtuelle Java cible écoute. Le port par défaut est 8563. ---- use-version: spécifiez la version cible de la machine virtuelle Java. Utilisez une version spéciale d'Arthas. ---- use-http: Force l'utilisation de HTTP pour télécharger des éléments. HTTPS est utilisé par défaut. -- — verbose: Rendre le code redondant pour afficher plus d'informations de débogage. Rendez votre code plus redondant pour afficher plus d'informations de débogage.

Utilisation de la console du terminal

Une fois qu'Arthas est opérationnel, vous pouvez cliquer sur Entrée pour sauter dans Arthas. Utilisez ensuite l'interface de ligne de commande associée à Arthas pour entrer des commandes supplémentaires dans le serveur Arthas. Ici, dans l'exemple présenté dans cet article, --target-ip n'est pas spécifié car il s'agit d'une machine locale.

Voici un exemple de ce à quoi ressemble le terminal.

image.png

Vous pouvez obtenir une aide supplémentaire à partir de l'invite interne en tapant help et en cliquant sur la touche Entrée. Les résultats de la machine actuelle sont les suivants.

$ help
 NAME         DESCRIPTION                                                                                                                      
 help         Display Arthas Help                                                                                                              
 keymap       Display all the available keymap for the specified connection.                                                                   
 sc           Search all the classes loaded by JVM                                                                                             
 sm           Search the method of classes loaded by JVM                                                                                       
 classloader  Show classloader info                                                                                                            
 jad          Decompile class                                                                                                                  
 getstatic    Show the static field of a class                                                                                                 
 monitor      Monitor method execution statistics, e.g. total/success/failure count, average rt, fail rate, etc.                               
 stack        Display the stack trace for the specified class and method                                                                       
 thread       Display thread info, thread stack                                                                                                
 trace        Trace the execution time of specified method invocation.                                                                         
 watch        Display the input/output parameter, return object, and thrown exception of specified method invocation                           
 tt           Time Tunnel                                                                                                                      
 jvm          Display the target JVM information                                                                                               
 ognl         Execute ognl expression.                                                                                                         
 mc           Memory compiler, compiles java files into bytecode and class files in memory.                                                    
 redefine     Redefine classes. @see Instrumentation#redefineClasses(ClassDefinition...)                                                       
 dashboard    Overview of target jvm's thread, memory, gc, vm, tomcat info.                                                                    
 dump         Dump class byte array from JVM                                                                                                   
 options      View and change various Arthas options                                                                                           
 cls          Clear the screen                                                                                                                 
 reset        Reset all the enhanced classes                                                                                                   
 version      Display Arthas version                                                                                                           
 shutdown     Shutdown Arthas server and exit the console                                                                                      
 session      Display current session information                                                                                              
 sysprop      Display, and change the system properties.                                                                                       
 sysenv       Display the system env.                                                                                                          
 history      Display command history                                                                                                          
 cat          Concatenate and print files                                                                                                      
 pwd          Return working directory name    

À partir des résultats ci-dessus, vous pouvez facilement trouver des commandes supplémentaires utiles pour les diagnostics de production Arthas. Jetons un coup d'œil à certains d'entre eux dans les lignes ci-dessous.

Tout d'abord, il y a la commande Dashboard (https://arthas.aliyun.com/doc/en/dashboard.html?spm=a2c65.11461447.0.0.26773774iloTj8). Il fournit un aperçu en temps réel des threads actuels de la machine virtuelle Java, de l'utilisation du processeur, de l'utilisation de la mémoire, de l'architecture de l'ordinateur et du système d'exploitation, comme indiqué dans l'image ci-dessous.

image.png

La commande classloader est ensuite utilisée pour afficher les informations de chargement de classe. D'autres options incluent une liste complète de toutes les instances de classe (-l) et une vue de la hiérarchie du chargeur de classe ( -t).

Il existe également la commande jad, qui est un excellent outil pour décompiler les classes. Quant à son fonctionnement, vous pouvez trouver le code de classe exact qui s'exécute dans l'environnement de production, vous pouvez donc être sûr que le code en cours d'exécution est en fait le code que vous souhaitez exécuter en ligne. .. Il s'agit d'une commande relativement simple qui suit le nom de classe indiqué ici: jad java.lang.String. Le résultat de cette commande est que la classe String a été décompilée sur la console.

Une manière plus avancée de décompiler uniquement le code source d'une classe et de l'enregistrer dans un fichier à un emplacement spécifié est: jad -source-only java.lang.String> / tmp / String. java. Pour cette raison, nous utilisons -source-only pour supprimer certains chargeurs de classe et descriptions d'emplacement spécifiques du début de la classe décompilée.

La commande getstatic est utilisée pour afficher les valeurs de champ statiques d'une classe. La syntaxe pour cela est la suivante: getstatic package.to.Class staticFieldName.. Et un autre exemple: getstatic java.lang.String serialVersionUID affiche la valeur UID de la version série de la chaîne comme suit:

image.png

La commande jvm est utilisée pour afficher les résultats complets d'une machine virtuelle Java. Ensuite, sc peut lire toutes les classes chargées par la JVM en tant que classes de recherche. Je peux le faire. Ceci est utile pour détecter les problèmes de chargement de classe.

Ensuite, l'option -d imprime des informations spécifiques relatives à la classe recherchée. Ces informations peuvent être utilisées pour déterminer de quelle classe il s'agit. Par exemple, vous pouvez déterminer s'il s'agit d'une interface, d'une annotation ou d'une énumération. L'image ci-dessous montre les résultats de la vérification de java.lang.String avec et sans l'option -d.

image.png

sc prend également en charge les caractères génériques, ce qui est utile pour afficher plus de résultats, comme afficher toutes les classes contenant une classe correspondante spécifique. Cela peut être fait avec la syntaxe suivante: sc String *. Voir l'exemple de sortie ci-dessous.

image.png

sm signifie Search Method et est utilisé pour rechercher des méthodes dans la classe chargée et les afficher sur la console. L'option d est particulièrement utile pour rechercher des informations sur une seule méthode, telles que des modificateurs, des annotations, des paramètres, des types de retour et des exceptions.

Autres exemples

Vous pouvez également utiliser les commandes suivantes.

- sm java.lang.String
- sm -d java.lang.String toString

Dans tous les cas, le résultat est le suivant.

image.png

image.png

Ensuite, vous pouvez également utiliser sysenv qui peut afficher les variables d'environnement JVM actuelles sur la console. Je vais. Exécutez également la commande keymap comme indiqué dans la capture d'écran ci-dessous pour exécuter le keymap actuel. Vous pouvez également imprimer.

image.png

Une autre commande couramment utilisée est thread, qui peut être utilisée pour afficher toutes les informations de thread Java dans une table, comme ceci:

image.png

Pour afficher la pile d'un thread particulier, exécutez simplement une commande avec l'ID de thread correspondant, par exemple «thread 40». Comme autre exemple, vous pouvez utiliser thread -n 3 pour afficher la trace de pile en détail et lister les trois threads les plus fréquemment utilisés, ou à la placethread –b Vous pouvez également utiliserpour rechercher et répertorier tous les threads bloquants. Consultez ce document pour plus d'informations sur leur fonctionnement. S'il te plait donne moi.

Ensuite, il y a watch. Il surveille les valeurs de retour, les exceptions et les paramètres des méthodes de classe. Prenons un exemple utilisant la commande watch. Supposons que vous exécutiez:

watch package.to.*Controller * '{params, returnObj, throwExp}'

Dans ce qui précède, le premier paramètre est le nom de classe qui prend en charge les caractères génériques et le deuxième paramètre est la méthode. Cela arrive également à prendre en charge l'utilisation de caractères génériques. Dans l'ensemble, cette commande affiche les paramètres en temps réel et renvoie des objets et des exceptions lorsqu'une méthode de contrôleur est appelée ou appelée. Cette commande est très utile pour le débogage.

Voici quelques points à garder à l'esprit:

-- * Controller correspond à UserController, BillingController, AuthController, IndexController, etc.

Un autre bon exemple d'utilisation du projet Arthas-demo provient de la documentation (https://arthas.aliyun.com/doc/en/quick-start.html?spm=a2c65.11461447.0.0.26773774iloTj8#watch) Vous pouvez y accéder.

Dans l'interface de la console, Arthas prend en charge la fonction de saisie semi-automatique. Vous pouvez également vous déplacer entre les packages de plusieurs classes différentes pour obtenir plus de suggestions, en fonction du premier mot que vous tapez, simplement en cliquant sur la touche Tab.

L'image ci-dessous montre les suggestions de saisie semi-automatique qui apparaissent lorsque vous tapez .string.

image.png

La commande trace retrace l'heure d'exécution de l'appel de méthode spécifié. Cela permet de déterminer les défauts de performances qui peuvent être dans votre application Java, car seuls les appels de méthode de premier niveau sont suivis, et non en profondeur.

Considérez ce qui suit: trace package.to.Class method '# cost> 50'. Cette méthode trace et affiche l'exécution des fonctions de méthode de classe lorsque le coût en temps est de 50 ms ou plus.

La commande stack affiche ensuite la pile d'appels complète pour la méthode actuelle. Souvent, vous savez qu'une méthode sera appelée, mais vous ne savez jamais quel chemin de code sera exécuté ou quand cette méthode sera appelée. C'est le but de la commande stack. Il s'agit d'une syntaxe de type trace qui prend également en charge le filtrage, par exemple [Cost](https://arthas.aliyun.com/doc/en/stack.html?spm=a2c65.11461447.0.0.26773774iloTj8#filtering -by-cost) s'affiche en millisecondes.

Normalement, appuyer sur la flèche de direction (gauche, droite, haut, bas) dans l'interface de ligne de commande fait défiler la liste des commandes précédemment exécutées.

La commande shutdown est utilisée pour arrêter complètement le serveur Arthas et quitter la console.

Console Web Arthas

L'un des moyens les plus courants de travailler avec Arthas consiste à utiliser les commandes de terminal comme présenté dans cet article. Mais une autre façon de travailler avec Arthas est, bien sûr, d'utiliser la console Web de votre navigateur.

La console Web Arthas utilise des sockets Web pour communiquer avec le serveur Arthas et est accessible à l'adresse http: // server_ip_address: 8563 /. S'il est déployé localement, l'adresse serait 127.0.0.0.1.

L'interface Web ressemble à ceci:

image.png

Dans le menu supérieur de la console Web, vous pouvez voir que vous pouvez vous connecter à d'autres serveurs Arthas simplement en entrant l'adresse IP et le port du serveur. Une enquête plus approfondie à une date ultérieure peut le rendre plus sûr.

Résumé

Cet article détaille Arthas, y compris comment installer et lancer Arthas. Vous avez également appris à utiliser l'interface de ligne de commande d'Arthas pour exécuter des commandes de diagnostic des threads JVM.

Recommended Posts

L'outil de dépannage open source d'Alibaba "Archas"