Journal Gérer les Thread Dump Java

Posté par (page perso) .
Tags : aucun
14
31
mai
2010
L'une des forces du Java est d'être entouré d'outils performants et efficaces pour les développeurs. Nous parlons ici des frameworks de haut niveau qui viennent décharger le développeur de beaucoup de préoccupations de base, comme par exemple, la gestion de la mémoire ou des processus. Pourtant quand une application rend la machine virtuelle instable, il faut bien descendre de cette tour d'ivoire et savoir (re)mettre les mains dans le cambouis! Analyser l'état des processus présents dans la JVM en cas d'engorgement ou de crash permet de comprendre quels sont les appels qui ont consommé les ressources de façon anormale. Voici un rapide tour de quelques outils uiles dans ces moments là...
JConsole
Disponible dans le JDK de SUN et développée pour centraliser les outils d'administration de JVM, JConsole se connecte à une machine virtuelle locale ou distante. Son interface graphique présente l'utilisation de la mémoire, le nombre de threads, de classes dans la heap mais permet aussi (pour les JVM les plus récentes) de générer des dumps de la heap et des threads courants. Pour cela il suffit d'accéder à l'onglet MBeans, "java.lang > Threading > Operations" et de cliquer sur "dumpAllThreads". On accède ainsi aux détails des processus en cours, en attente ainsi qu'à leur état.
VisualVM
Voici un autre outil SUN plus récent et ergonomique que l'austère JConsole. Les informations présentées sont aussi plus détaillées : on retrouve par exemple un (rapide) historique de l'état de tous les threads. La force de VirtualVM repose en partie sur son fonctionnement en plugins qui lui permet de coller au plus près aux applications inspectées (Glassfish, OSGi, KillApplication, etc).

Thread Dump Analyzer
Voilà un plugin Eclipse : Thread Dump Analyzer qui agence les sorties textuelles des dumps que l'on peut récupérer dans les logs des serveurs d'application. Le plugin ne fait rien d'extraordinaire mais permet d'accéder rapidement aux informations essentielles dans des logs qui sont souvent bavards.

Ces outils sont la partie émergée de l'iceberg que constituent des applications en ligne de commande comme jps, jstat, jdebug, etc. Si l'environnement cible n'utilise pas la dernière version de la JVM, les JConsole et VisualVM resteront parfois inopérants et il faudra se retrousser les manches pour aller chercher ces informations en mode terminal. Dans ce cas, le document "Troubleshooting Guide for Java" constitue la référence indispensable pour générer et exploiter ces dumps.
  • # Java

    Posté par (page perso) . Évalué à 2.

    L'une des forces du Java est d'être entouré d'outils performants et efficaces pour les développeurs.
    Faut bien ça...
    Ne vous donnez pas la peine, je sors ;-)
  • # VisualVM

    Posté par (page perso) . Évalué à 1.

    Je ne connaissait pas VisualVM mais ça ressemble beaucoup au profiler présent dans Netbeans. D'ailleurs, le fait que l'application se base sur le même framework m'incite à penser que ces deux là partagent la même base de code.

    Ce que je trouve vraiment intéressant est la console OQL qui permet de faire des requêtes à la volée sur les objets de son application.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.