Outils et données de diagnostic

La machine virtuelle (MV) J9 produit différents types d'informations de diagnostic pour l'analyse. Divers outils peuvent être utilisés pour post-traiter ces informations et identifier les problèmes.

Certaines informations de diagnostic sont destinées à des zones spécifiques de l'environnement d'exécution Java™ . Par exemple, un vidage du tas (heap dump) fournit des informations utiles sur les instances de classe et d'objet présentées dans le tas Java, tandis qu'une trace J9 se concentre plutôt sur des problèmes plus généraux de la MV.

Au cours de la détermination des problèmes, l'un des premiers objectifs est d'identifier la zone où se situe probablement le problème. De nombreux problèmes qui semblent être un problème Java proviennent d'ailleurs. Les problèmes peuvent avoir les origines suivantes :
  • Machine virtuelle Java
  • le code natif
  • applications Java
  • un système d'exploitation ou une ressource système
  • un sous-système, tel que le code d'une base de données
  • Matériel

Différents outils et informations de diagnostic peuvent être nécessaires pour pouvoir résoudre les problèmes dans chaque zone. Les outils décrits ici sont ceux qui sont intégrés dans la MV J9 ou qui sont disponibles et utilisables avec celle-ci. La plupart sont des outils interplateformes. De nombreux autres outils sont proposés par les fournisseurs de matériels ou de logiciels système, tels que les débogueurs système.

Résumé des informations de diagnostic

Une machine virtuelle J9 contient des mécanismes permettant de produire différents types de données de diagnostic lorsque différents événements se produisent. En règle générale, la production de ces données s'effectue dans des conditions par défaut, mais elle peut être contrôlée en démarrant la machine virtuelle avec des options spécifiques (telles que -Xdump). Les anciennes versions de la machine virtuelle contrôlaient la production des informations de diagnostic en utilisant des variables d'environnement. Vous pouvez toujours utiliser ces variables d'environnement, mais elles ne constituent plus le mécanisme préféré.

Le format des informations de diagnostic produites est spécifique de la machine virtuelle J9 et peut changer d'une version à une autre.

Les types d'informations de diagnostic suivants peuvent être produits :
Fichier de vidage Java
Le fichier de vidage Java est parfois appelé Javacore ou vidage d'unité d'exécution dans certaines machines virtuelles. Il est dans un format lisible par l'utilisateur et est produit par défaut lorsque le machine virtuelle s'arrête de manière imprévue à la suite d'un signal du système d'exploitation ou d'une exception OutOfMemoryError, ou encore lorsque l'utilisateur entre une combinaison de touches réservée. Par exemple, Ctrl-Break sous Windows génère un fichier de vidage Java. Vous pouvez également générer un fichier de vidage Java en appelant une méthode à partir de l'API de vidage, par exemple com.ibm.jvm.Dump.JavaDump(), à partir de l'application. Un fichier de vidage Java récapitule l'état de la machine virtuelle au moment où le signal s'est produit. Une grande partie du contenu du fichier de vidage Java est spécifique à la machine virtuelle J9 . Pour plus d'informations, voir Java dump .
Fichier de vidage du tas
La machine virtuelle peut générer un fichier de vidage du tas à la demande de l'utilisateur (par exemple, en appelant com.ibm.jvm.Dump.HeapDump() dans l'application) ou (par défaut) lorsqu'elle s'arrête suite à une exception OutOfMemoryError. Vous pouvez spécifier un contrôle plus détaillé du moment de création d'un fichier de cliché de tas avec l'option -Xdump:heap. Par exemple, vous pourriez demander un vidage du tas après un certain nombre de récupérations de place complètes. Le format par défaut d'un vidage du tas (fichiers phd) n'est pas lisible par l'utilisateur. Pour cette raison, son traitement nécessite d'utiliser un outil tel que Memory Analyzer. Pour plus d'informations, voir Utilisation du vidage de tas .
Fichier de vidage système
Les fichiers de vidage système sont des fichiers spécifiques à la plateforme qui contiennent des informations sur les processus actifs, les unités d'exécution et la mémoire système. Ces fichiers sont également appelés vidages core sur les plateformes Linux® . Ce sont généralement de gros fichiers. Par défaut, ils sont produits par la machine virtuelle lorsqu'elle s'arrête de manière imprévue suite à un défaut de protection général (GPF) ou à une erreur grave de la machine virtuelle ou du système d'exploitation. Vous pouvez également demander un fichier de vidage système à l'aide de l'API Dump. Par exemple, vous pouvez appeler la méthode com.ibm.jvm.Dump.SystemDump() à partir de votre application. Vous pouvez utiliser l'option -Xdump:system pour produire des fichiers de vidage système lorsque d'autres événements se produisent.
Fichier de vidage JIT
Lorsqu'un défaut de protection général (GPF) ou un événement d'abandon se produit, le compilateur JIT (Just-In-Time) génère un petit fichier de vidage binaire des données de diagnostic qui peut aider à identifier la cause du problème. Pour plus d'informations sur l'emplacement de ce fichier, voir Emplacement du fichier.
Données de récupération de place
Une machine virtuelle démarrée avec l'option -verbose:gc génère une sortie au format XML qui peut être utilisée pour analyser les problèmes du récupérateur de place ou des problèmes dans la conception des applications utilisateur. De nombreuses autres options affectent la nature et la quantité d'informations de diagnostic de récupération de place produites. Pour plus d'informations, voir Données de diagnostic du récupérateur de place.
Données de trace
La fonction de trace J9 permet de consigner les points d'exécution dans le code Java et le code interne de la machine virtuelle. L'option -Xtrace permet de contrôler le nombre et les secteurs des points de trace et de gérer la taille et la nature des tampons de trace. Les tampons de trace internes capturés au moment de l'échec sont également disponibles dans le fichier de vidage système. Des outils sont disponibles pour vous permettre de les extraire du fichier. Généralement, les données de trace sont écrites dans le fichier dans un format encodé et un formateur de trace les convertit dans un format lisible. Toutefois, si une faible quantité de trace doit être produite et que les performances ne posent pas de problème, la trace peut être envoyée à STDERR pour être préformatée. Pour plus d'informations, voir Traçage des applications Java.
Autres données
Des options spéciales sont disponibles pour produire des informations de diagnostic associées aux composants J9 suivants :

Résumé des outils multiplateformes

Les outils interplateformes suivants peuvent être utilisés pour aider à diagnostiquer les problèmes :
IBM® Monitoring and Diagnostic Tools
IBM Monitoring and Diagnostic Tools est un ensemble d'outils à interface graphique qui permet de surveiller les applications et d'analyser des données de diagnostic. Ces outils sont conçus pour effectuer des tâches de diagnostic le plus rapidement et le plus simplement possible. Pour plus d'informations sur les outils, voir la documentation IBM Monitoring and Diagnostic tools .
Afficheur de vidages interplateformes
L'afficheur de vidages interplateformes, jdmpview, utilise les fichiers de vidage générés par le système d'exploitation pour résoudre les problèmes liés à la MV J9. Il comprend la machine virtuelle et peut être utilisé pour analyser ses mécanismes internes. Il est utile pour déboguer les arrêts imprévus de la MV. Etant donné que l'afficheur des vidages est interplateformes, vous pouvez analyser un vidage de n'importe quel système, même si vous ne connaissez pas le débogueur du système. Pour plus d'informations, voir Dump viewer (jdmpview).
Outils JVMTI
L'interface JVMTI (JVM Tool Interface) est une interface de programmation utilisée par les outils, remplaçant l'interface JVMPI (Java Virtual Machine Profiler Interface) et l'interface JVMDI (Java Virtual Machine Debug Interface). Pour plus d'informations sur JVMTI, voir Java Virtual Machine Tool Interface.
Outils JPDA
Java Platform Debugging Architecture (JPDA) est une norme commune pour le débogage d'une machine virtuelle Java. J9 est entièrement compatible avec JPDA. N'importe quel débogueur JPDA peut être attaché à la MV J9. Etant donné que ce sont des débogueurs, les outils JPDA sont les mieux adaptés pour tracer les problèmes récurrents des applications, tels que les fuites de mémoire ou les blocages. Le débogueur fourni avec Eclipse for Java est un exemple d'outil JPDA.
DTFJ
Diagnostic Tool Framework for Java (DTFJ) est une interface de programme d'application (API) Java utilisée pour prendre en charge la génération d'outils de diagnostic Java. DTFJ peut examiner un fichier de vidage système pour analyser la structure interne de la machine virtuelle Java. DTFJ est implémenté en code Java pur, et les outils écrits à l'aide de DTFJ peuvent être multiplateformes. Par conséquent, un fichier de vidage ayant été généré sur une machine peut très bien être analysé ensuite sur une autre machine plus pratique. Par exemple, un fichier de vidage produit sur une machine z/OS® peut être analysé sur un Thinkpad Windows. Pour plus d'informations, voir Utilisation de l'infrastructure de l'outil de diagnostic pour Java.
Formatage de la trace
Le traçage est un outil de diagnostic essentiel. La MV J9 offre une grande souplesse pour déterminer ce qui est tracé et quand. Cette souplesse permet de personnaliser le traçage pour qu'il ait un impact minimal sur les performances. La machine virtuelle J9 contient également de nombreux points de trace intégrés. Dans cette version, le traçage maximal est activé par défaut pour un petit nombre de points de traçage de niveau 1 et les points de traçage d'exception. Des options de ligne de commande vous permettent de définir exactement ce qui est tracé et de spécifier où doit aller la sortie de la trace. La sortie de la trace est généralement dans un format encodé et nécessite un formateur de trace pour pouvoir l'afficher.
Outre les points de trace intégrés fournis dans le code de la machine virtuelle, vous pouvez placer vos propres points de trace d'application dans votre code Java. Vous pouvez activer le traçage des entrées et des sorties par rapport à toutes les méthodes dans toutes les classes. Vous pouvez également activer le traçage pour un certain nombre de méthodes dans un certain nombre de classes. Les traces de l'application et des méthodes sont entremêlées dans les tampons de trace avec les points de trace embarqués de la MV. Le traçage permet d'analyser en détail les chemins utilisés par le code. Le traçage est utilisé principalement pour déterminer les problèmes de performances et de fuites. Les données de trace peuvent également fournir des indications sur l'état d'une machine virtuelle avant une fin anormale ou un blocage. La trace et le formatage de trace sont spécifiques à la MV J9. Pour plus d'informations, voir Traçage des applications Java . Bien que le traçage ne soit pas facilement compréhensible, il s'agit d'un outil extrêmement efficace.