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.
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
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
java -jar arthas-boot.jar -h
À 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.
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.
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.
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:
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
.
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.
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.
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.
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.
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:
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 utiliser
pour 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.
-e
et ne détecte que les requêtes qui lèvent une exception.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.
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.
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:
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.
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