Tous les produits
Search
Centre de documentation

Application Real-Time Monitoring Service:Diagnostics Arthas

Dernière mise à jour :Aug 10, 2026

Arthas est un outil puissant pour diagnostiquer les problèmes de production dans les applications Java. Il utilise l'instrumentation du bytecode pour inspecter l'état d'exécution d'un programme sans redémarrer le processus JVM.

Prérequis

Important
  • Application Monitoring (ARMS) propose une nouvelle page de détails de surveillance pour les utilisateurs ayant activé le nouveau plan de facturation. Pour plus d'informations, consultez la rubrique Facturation des produits (nouveau).

    Si vous n'avez pas activé le nouveau plan de facturation et souhaitez afficher la nouvelle page de détails de surveillance, cliquez sur Switch to New Version dans la page Application List.

  • Cette fonctionnalité ne prend actuellement en charge que les applications Java.

  • Nous vous recommandons d'activer la fonctionnalité de diagnostics Arthas uniquement pour le dépannage et de la désactiver lors d'une utilisation courante.

  • La version de l'agent ARMS doit être la v2.7.1.3 ou ultérieure.

  • Votre application est connectée à Application Monitoring. Pour plus d'informations, consultez la rubrique Présentation d'Application Monitoring.

  • L'application doit être écrite en Java.

Informations générales

La fonctionnalité de diagnostics Arthas fournie par ARMS complète principalement les capacités de diagnostic en temps réel d'ARMS. La fonctionnalité de diagnostics Arthas d'ARMS inclut les types suivants :

  • Vue d'ensemble de la JVM : affichez l'utilisation de la mémoire en temps réel, les informations système, les variables système et les variables d'environnement pour le processus JVM actuel.

  • Analyse de la durée des threads : affichez le temps CPU consommé par les threads du processus JVM actuel et la pile de méthodes en temps réel d'un thread spécifique.

  • Analyse de l'exécution des méthodes : capturez un seul enregistrement d'exécution de toute méthode non-JDK répondant à des conditions spécifiées. Cet enregistrement inclut les paramètres de la méthode, les exceptions, les valeurs de retour et la durée d'exécution des méthodes internes.

  • Visionneuse d'objets : affichez les valeurs de champ en temps réel de toute instance de classe.

  • Tableau de bord en temps réel : affichez des tableaux de bord en temps réel pour les composants courants. Par exemple, le tableau de bord en temps réel pour un pool de connexions Druid affiche sa configuration, son utilisation et les durées d'exécution SQL.

  • Analyse des performances : échantillonnez des données telles que le temps CPU et l'allocation de mémoire sur une période donnée pour générer les graphiques en flammes correspondants.

  • Shell Arthas : utilisez la ligne de commande pour effectuer des diagnostics Arthas.

Informations sur la version d'Arthas

Pour les versions de l'agent ARMS allant de la v2.7.1.3 à la 4.6.x, la version Arthas correspondante est la 3.5.6. Pour les versions de l'agent ARMS 4.7.x et ultérieures, la version Arthas correspondante est la 4.1.0.

Activer les diagnostics Arthas

  1. Connectez-vous à la console ARMS. Dans le volet de navigation de gauche, choisissez Application Monitoring > Application List.

  2. Dans la page Application List, sélectionnez une région en haut de la page, puis cliquez sur le nom de l'application cible.

    Remarque

    Les icônes de la colonne Language indiquent les éléments suivants :

    Java图标 : une application Java connectée à Application Monitoring.

    image : une application Go connectée à Application Monitoring.

    image : une application Python connectée à Application Monitoring.

    - : une application connectée à Managed Service for OpenTelemetry.

  3. Dans la barre de navigation supérieure, choisissez Application Configuration > Custom Configurations.

  4. Dans la section Arthas Monitoring, activez le commutateur Arthas. Vous pouvez également exécuter des diagnostics uniquement sur des adresses IP spécifiques en les ajoutant à la configuration.

  5. Cliquez sur Save.

Afficher les diagnostics Arthas

  1. Connectez-vous à la console ARMS. Dans le volet de navigation de gauche, choisissez Application Monitoring > Application List.

  2. Dans la page Application List, sélectionnez une région en haut de la page, puis cliquez sur le nom de l'application cible.

    Remarque

    Les icônes de la colonne Language indiquent les éléments suivants :

    Java图标 : une application Java connectée à Application Monitoring.

    image : une application Go connectée à Application Monitoring.

    image : une application Python connectée à Application Monitoring.

    - : une application connectée à Managed Service for OpenTelemetry.

  3. Dans la barre de navigation supérieure, choisissez Application Diagnostics > Arthas Diagnostics.

  4. En haut de la page Arthas Diagnostics, sélectionnez une instance à diagnostiquer dans la liste déroulante.

    • Si l'agent ARMS de l'instance n'est pas mis à niveau vers la version v2.7.1.3 ou ultérieure, la page vous invite à mettre à niveau l'agent au préalable.

    • Si l'agent ARMS de l'instance est mis à niveau vers la version v2.7.1.3 ou ultérieure, la page affiche les informations de diagnostic Arthas pour l'instance.

Vue d'ensemble de la JVM

La fonctionnalité de vue d'ensemble de la JVM offre une vision globale de l'état de la JVM de votre application, y compris la mémoire, les informations sur le système d'exploitation et les variables.

La page des diagnostics Arthas affiche par défaut l'onglet JVM Overview. Dans l'onglet JVM Overview, vous pouvez consulter les informations suivantes :

  • JVM Memory : informations sur la mémoire JVM, notamment l'utilisation du tas (heap), l'utilisation hors tas (non-heap) et l'état du garbage collection (GC). Le tableau affiche la mémoire Used, Total et Max pour les zones heap, buffer_pool et nonheap, ainsi que le Total Count et le Total Time pour chaque type de GC.

  • Operating System Information : informations sur le système d'exploitation, notamment la charge moyenne, le nom du système d'exploitation, la version du système d'exploitation et la version de Java. Les champs incluent systemLoadAverage, osVersion, javaVersion, processors, osName, javaHome, timestamp et uptime.

  • Variable information : informations sur les variables, y compris les variables système et d'environnement. La page est divisée en un panneau System variables à gauche et un panneau Environment variables à droite, chacun doté d'une zone de recherche pour filtrer par mot-clé. Les variables sont affichées sous forme de paires clé-valeur.

Analyse de la durée des threads

L'analyse de la durée des threads affiche tous les threads de l'application et vous permet de consulter les informations sur la pile des threads. Cela vous aide à identifier rapidement les threads à forte utilisation du CPU.

  1. Dans la page Arthas Diagnostics, cliquez sur l'onglet Threading Time Analysis.

    L'onglet Threading Time Analysis récupère l'utilisation du CPU en temps réel des threads du processus JVM actuel et regroupe les threads similaires. Le haut de la page indique le nombre de threads dans chaque état (NEW, TERMINATED, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING). Le tableau ci-dessous agrège les threads par Name, Total CPU et Count. Vous pouvez développer un groupe pour afficher l'ID, l'utilisation du CPU, l'état de chaque thread, ainsi que l'action View real-time stack.

  2. Cliquez sur l'icône + à gauche d'un groupe de threads pour développer ses détails. Vous pouvez consulter l'ID, l'utilisation du CPU et l'état de chaque thread.

  3. Pour afficher la pile d'un thread, cliquez sur View Live Stack dans la colonne Actions correspondante.

    La boîte de dialogue Thread Details s'affiche et présente le nom du thread, son état (par exemple, RUNNABLE) et la pile Java complète.

Analyse de l'exécution des méthodes

L'analyse de l'exécution des méthodes vous permet de capturer la durée, les paramètres d'entrée et les valeurs de retour d'une exécution de méthode spécifique, et d'effectuer un forage dans celle-ci. Cette fonctionnalité vous aide à localiser rapidement la cause première des appels lents et s'avère utile dans les scénarios où les problèmes ne peuvent pas être reproduits hors ligne ou lorsque les journaux sont manquants.

  1. Dans la page Arthas Diagnostics, cliquez sur l'onglet Method Execution Analysis.

  2. Dans l'onglet Method Execution Analysis, saisissez un mot-clé pour le nom de la classe dans la zone de recherche, puis cliquez sur l'icône 搜索.

  3. Dans les résultats de recherche, sélectionnez la classe que vous souhaitez diagnostiquer, choisissez une méthode dans la liste déroulante à droite, puis cliquez sur OK.

    La page affiche les informations issues d'une exécution capturée aléatoirement de la méthode sélectionnée par ARMS et .

    • La section Execution Stack à gauche affiche l'enregistrement d'exécution interne de la méthode diagnostiquée.

      • Pour effectuer un forage dans une méthode interne, cliquez sur Drill-down dans la colonne Actions.

      • Pour afficher le code source de la méthode, cliquez sur View Source Code en haut de la section Execution Stack.

        La durée d'exécution de chaque méthode interne est affichée sous forme de commentaire dans le code source.

    • La section Method Execution Result à droite affiche les valeurs des paramètres, la valeur de retour, les exceptions, les variables membres et le TraceID de cette exécution de méthode.

    • Dans la section Set Execution Conditions à droite, procédez comme suit pour définir les conditions de capture des enregistrements d'exécution de méthode :

      1. Sélectionnez une méthode surchargée de la méthode actuelle.

      2. Dans la liste déroulante Please select initial filter key, sélectionnez un type de clé, puis cliquez sur l'icône 向左箭头.

        Types de clés de filtre initiales :

        • params[n] : le nième paramètre de la méthode.

        • returnObj : la valeur de retour de la méthode.

        • Method execution duration : le temps d'exécution de la méthode.

        • Whether an exception is thrown : une condition basée sur le fait que la méthode a levé une exception ou non.

        Remarque

        Si la clé de filtre initiale sélectionnée est de type imbriqué, vous devez continuer à sélectionner ses champs internes jusqu'à atteindre un type primitif.

      3. Sélectionnez un opérateur de comparaison.

      4. Saisissez une valeur de filtre.

      5. Cliquez sur Add.

        La condition de filtre ajoutée apparaît dans la section Current Filter Condition.

        Par exemple, sélectionnez la méthode surchargée doGetDatas(ArmsCtx, String), définissez la clé de filtre actuelle sur params[0].userId, sélectionnez l'opérateur =, saisissez la valeur 123, puis cliquez sur Add. La section Current Filtering Conditions affiche les conditions configurées, telles que params.length = 2 et params[0].userId = 123.

      6. Cliquez sur l'icône 刷新 dans le coin supérieur droit de la section Execution Stack. Le système recapture une exécution de méthode en fonction des conditions définies.

Visionneuse d'objets

Utilisez la visionneuse d'objets pour inspecter l'état des objets singleton et résoudre les problèmes liés à la configuration de l'application, aux listes d'autorisation, aux listes de blocage et aux variables membres.

  1. Dans la page Arthas Diagnostics, cliquez sur l'onglet Object Viewer.

  2. Dans l'onglet Object Viewer, saisissez un mot-clé pour le nom de la classe dans la zone de recherche, puis cliquez sur l'icône Search.

  3. Dans les résultats de recherche, sélectionnez la classe à diagnostiquer. Ensuite, dans la liste d'instances à droite, sélectionnez une instance et cliquez sur OK.

    La page affiche les valeurs en temps réel des champs de cette instance. La page est divisée en un panneau Real-time Field Values of Object à gauche (un tableau avec les colonnes Type, Field Name et Details) et un panneau Field Details à droite (qui affiche les données JSON détaillées pour le champ sélectionné).

    • Pour les champs de type simple, la colonne Details du panneau Object field real-time value affiche la valeur du champ.

    • Pour les champs de type complexe, cliquez sur View Details dans la colonne Details du panneau Object field real-time value pour voir les détails de la valeur du champ dans le panneau Field Details à droite.

      Le panneau Field Details ne prend en charge qu'une désérialisation à un niveau pour les champs complexes. Pour afficher des données plus spécifiques, cliquez sur Click.

Tableau de bord en temps réel

Utilisez le tableau de bord en temps réel pour afficher l'état en temps réel des composants clés de votre système, tels que les pools de connexions de base de données et les pools de connexions HTTP. Cela vous aide à résoudre les problèmes liés aux ressources.

  1. Dans la page Arthas Diagnostics, cliquez sur l'onglet Live Kanban.

  2. Dans l'onglet Live Kanban, sélectionnez un tableau de bord dans la liste déroulante, choisissez une instance dans la zone de sélection d'instance à droite, puis cliquez sur Add to dashboard.

    La page affiche les données en temps réel du tableau de bord. Par exemple, pour un pool de connexions Druid, les informations d'état incluent la configuration de base, l'état du pool et la distribution des durées d'exécution. La configuration de base comprend DbType et URL. L'état du pool inclut des métriques telles que ActiveCount, PoolingCount et MaxActive. Les diagrammes à barres ci-dessous montrent la distribution du temps de détention de connexion et la distribution de la durée d'exécution des transactions.

Analyse des performances

L'analyse des performances échantillonne des données telles que le temps CPU et l'allocation de mémoire sur une période donnée et génère des graphiques en flammes. Cela vous aide à identifier rapidement les goulets d'étranglement de performance des applications.

  1. Dans la page Arthas Diagnostics, cliquez sur l'onglet Performance Analytics.

  2. Sous l'onglet Performance Analytics, cliquez sur Create flame map.

  3. Dans la boîte de dialogue Create flame map, sélectionnez un type de graphique en flammes, saisissez la durée d'échantillonnage et des remarques, puis cliquez sur Confirm.

    Paramètre

    Description

    Exemple

    Type de graphique en flammes

    Le type d'objet à échantillonner. Valeurs valides :

    • Temps CPU

    • Allocation de mémoire

    • Temps de verrouillage

    • itimer

    Temps CPU

    Durée d'échantillonnage (en secondes)

    La durée d'échantillonnage. Valeurs valides : 10 à 1800.

    30

    Les informations de tâche pour le graphique en flammes créé s'affichent sous l'onglet Performance Analytics, notamment l'heure de début, la durée d'échantillonnage, les remarques, le type de graphique en flammes et l'état de la tâche. Une fois la tâche terminée, un lien View flame graph s'affiche dans la colonne Task Status. Vous pouvez cliquer sur ce lien pour afficher le graphique en flammes généré.

  4. Sous l'onglet Performance Analytics, recherchez l'enregistrement de la tâche. Dans la colonne Task Status, cliquez sur View flame chart. Suivez les instructions à l'écran pour télécharger le fichier du graphique en flammes au format SVG, puis ouvrez le fichier dans un navigateur.

    火焰图

Shell Arthas

Utilisez la ligne de commande pour effectuer des diagnostics Arthas personnalisés.

En haut de la page Arthas Shell, vous pouvez sélectionner une option Route et utiliser le bouton Connect ou Disconnect. Après une connexion réussie, une invite d'état verte Connected s'affiche. L'interface de terminal noire ci-dessous affiche l'invite de commande Arthas, telle que [arthas@9]$. Vous pouvez saisir des commandes Arthas dans le terminal pour effectuer des opérations de diagnostic.

FAQ

Aucune invite ou heartbeat après l'activation d'Arthas

Ce problème peut survenir pour les deux raisons suivantes :

  • Problème de connectivité réseau.

    Vérifiez la connectivité réseau. Si les connexions aux ports de diagnostic d'application publics et privés (9092) échouent toutes les deux, vous devez configurer le groupe de sécurité pour autoriser l'accès sortant sur le port 9092 pour les domaines de point de terminaison de diagnostic et d'accès dans la région correspondante. Pour obtenir des informations sur les noms de domaine requis, consultez la rubrique Configurations réseau pour la surveillance des applications Java. Le domaine de diagnostic d'application est identique au domaine de métadonnées de trace.

  • L'application dispose d'un agent SkyWalking attaché.

    L'agent Arthas intégré dans ARMS est incompatible avec l'agent SkyWalking. Vous devez soit désinstaller l'agent SkyWalking, soit attacher manuellement une version ultérieure d'Arthas (3.7.0 ou ultérieure).

    Exécutez la commande cat ~/logs/arthas/arthas.log. Une exception indiquant une incompatibilité d'agent s'affiche à la fin du journal.

    2023-09-11 09:09:47 [arthas-binding-thread] ERROR c.t.a.core.server.ArthasBootstrap -start channel client failure
    java.lang.ExceptionInInitializerError: null
    	at com.alibaba.arthas.channel.proto.ArthasServiceGrpc$ArthasServiceStub.register(ArthasServiceGrpc.java:306)
    	at com.alibaba.arthas.channel.client.ChannelClient.connect(ChannelClient.java:165)
    	at com.alibaba.arthas.channel.client.ChannelClient.start(ChannelClient.java:111)
    	at com.taobao.arthas.core.server.ArthasBootstrap.bind(ArthasBootstrap.java:478)
    	at com.taobao.arthas.core.server.ArthasBootstrap.<init>(ArthasBootstrap.java:162)
    	at com.taobao.arthas.core.server.ArthasBootstrap.getInstance(ArthasBootstrap.java:613)
    	at com.taobao.arthas.core.server.ArthasBootstrap.getInstance(ArthasBootstrap.java:601)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at com.taobao.arthas.agent334.AgentBootstrap.bind(AgentBootstrap.java:182)
    	at com.taobao.arthas.agent334.AgentBootstrap.access$000(AgentBootstrap.java:20)
    	at com.taobao.arthas.agent334.AgentBootstrap$1.run(AgentBootstrap.java:152)
    Caused by: java.lang.reflect.InvocationTargetException: null
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at io.grpc.stub.ClientCalls.<clinit>(ClientCalls.java:52)
    	... 14 common frames omitted
    Caused by: java.lang.reflect.InvocationTargetException: null
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.apache.skywalking.apm.dependencies.net.bytebuddy.dynamic.Nexus.initialize(Nexus.java:139)
    	... 19 common frames omitted
    Caused by: java.lang.NoClassDefFoundError: Lorg/apache/skywalking/apm/agent/core/plugin/interceptor/enhance/StaticMethodsInter;
    	at java.lang.Class.getDeclaredFields0(Native Method)
    	at java.lang.Class.privateGetDeclaredFields(Class.java:2583)
    	at java.lang.Class.getDeclaredField(Class.java:2068)
    	at org.apache.skywalking.apm.dependencies.net.bytebuddy.implementation.LoadedTypeInitializer$ForStaticField.onLoad(LoadedTypeInitializer.java:163)
    	at org.apache.skywalking.apm.dependencies.net.bytebuddy.implementation.LoadedTypeInitializer$Compound.onLoad(LoadedTypeInitializer.java:233)
    	at org.apache.skywalking.apm.dependencies.net.bytebuddy.agent.builder.AgentBuilder$InitializationStrategy$SelfInjection$Dispatcher$InjectingInitializer.onLoad(AgentBuilder.java:3655)
    	... 24 common frames omitted
    Caused by: java.lang.ClassNotFoundException: org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.StaticMethodsInter
    	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    	at com.taobao.arthas.agent.ArthasClassloader.loadClass(ArthasClassloader.java:34)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    	... 30 common frames omitted
    

Échec de la commande dans l'analyse de l'exécution des méthodes

L'animation de chargement dans la section Execution Stack de la page Method execution analysis indique que le système attend l'appel de la méthode.

L'analyse de l'exécution des méthodes capture l'exécution de la méthode actuellement sélectionnée en temps réel. Si la méthode ne s'exécute pas pendant la période d'attente, l'opération expire et cette erreur se produit. Vous pouvez cliquer sur l'icône Refresh pour réessayer.

Taille incorrecte de l'espace Survivor

L'espace Survivor est divisé en deux parties égales : un espace « from » et un espace « to ». Arthas n'affiche que la taille de l'espace « from ».

Facturation des diagnostics Arthas

Non. Cette fonctionnalité n'entraîne aucun frais supplémentaire.

Connexion refusée lors de l'attachement manuel d'Arthas

Par défaut, Arthas utilise le port 3658 pour accepter les nouvelles connexions client. Afin d'éviter les conflits de port lorsque plusieurs processus sur le même hôte attachent Arthas, Arthas intégré à ARMS utilise un port aléatoire. Cela peut entraîner des échecs d'attachement. Si ce problème survient, vous devez désactiver la fonctionnalité Arthas dans la console ARMS avant d'attacher manuellement Arthas.

Erreur « Arthas server already bind »

Si une instance Arthas open source a été précédemment attachée à l'application, Arthas intégré à ARMS ne peut pas être activé. Vous devez d'abord supprimer Arthas open source, puis activer Arthas intégré à ARMS.