HotSpot Serviceability Agent, quézako ?

La JVM HotSport dispose désormais de plusieurs APIs et outils qui facilitent la résolution de problème en « live » : HotSpot Serviceability Agent ou SA.

 

A défaut d’un véritable outil d’APM (Application Performance Management) HotSpot Serviceability Agent constitue une véritable boîte à outils pour obtenir des informations en direct sur le comportement d’une JVM.

JDKs compatibles

Cette petite nouveauté est disponible à partir des JDKs suivants :

  • 6u17+ sur Oracle Solaris et Linux
  • 6u31+ sur Microsoft Windows
  • JDK 7 pour toutes les plateformes
  • JDK 8 pour toutes les plateformes

Binaires

L’outil se compose de 2 binaires situés dans le répertoire lib du JDK :

  • Solaris / Linux :
    • sa-jdi.jar
    • libsaproc.so
  • Microsoft Windows :
    • sa-jdi.jar
    • jvm.dll

Que peut-on faire avec ?

Voici quelques cas d’utilisation possibles avec cet outil. La liste n’est pas exhaustive :

  • Obtenir un thread dump (jstack)
  • Obtenir des informations
    • sur les threads
    • les paramètres de configuration de la heap
    • les paramètres de la JVM
    • La liste des flags de la JVM avec leurs valeurs
  • Obtenir la liste des classes chargées en mémoire (classes)
  • Générer sur disque le .class d’une classe (dumpclass)
  • Déclencher un heap dump (dumpheap)
  • etc…

 

Toutes les commandes qui génèrent des fichiers telle que la génération d’un heap dump le font dans le répertoire courant d’où a été lancée la JVM.

Lancement

 

L’outil est disponible sous une forme graphique (AWT) et sous la forme d’une console texte pure, pratique pour les environnements ne disposant pas d’interface graphique.

 

Version console

 

java -cp /opt/oracle/java/lib/sa-jdi.jar sun.jvm.hotspot.CLHSDB

La commande « help » permet d’avoir la liste des commandes disponibles.

Console Interactive

La commande « attach » permet de s’accrocher à une JVM en indiquant son PID :

Command attach

Commande « attach »

 

La commande « jstack » permet d’obtenir un thread dump :

jstack

jstack

 

Version graphique

 

java -cp /opt/oracle/java/lib/sa-jdi.jar sun.jvm.hotspot.HSDB

 

 

Une fois lancé, il faut « s’attacher » au processus de la JVM, il faut donc connaître son Process ID (ou PID). Utiliser jps par exemple pour le connaître.

 

Saisie du PID

Les commandes

Les commandes

 

Il est à noter que l’interface graphique dispose également d’une console interactive permettant de taper directement les commandes au clavier.

 

Console Interactive

Console Interactive

Référence

Un Wiki est disponible pour obtenir davantage d’informations.