vendredi 18 novembre 2011

Java : Gérer la JVM avec Java Management Extensions (JMX) Technology - Partie 1 - Présentation

JMX permet la gestion de resources entre deux machines virtuelles Java. La JVM implémente par défaut JMX pour permettre la supervision et la gestion de ses arcanes internes. On peut surveiller par exemple les différents espaces mémoire utilisés par un programme Java au moyen de JMX.
Un programme de gestion est livré avec le JDK et est une excellente vitrine technologique, il s'agit de JConsole.

JConsole se lance en tapant la commande jconsole dans une fenêtre d'execution ( windows+R sous windows, souvent Alt+F2 sous linux ). Si java est dans le path système, sinon l'executable se trouve avec les autres binaires java ( dans JAVA_HOME/bin si la variable est définie).

Fenêtre de démarrage de JConsole

Dans cet exemple je vais utiliser JConsole pour gérer JConsole. Biensûr n'importe quel programme Java peut-être géré ( sur la machine locale), et pour des raisons de sécurité, il faut activer la gestion par RMI ou par un autre protocole pour les accès distant. On peut également protéger l'accès par nom d'utilisateur mot de passe.

Onglet  Overview, la page d'accueil de JConsole


Une fois connecté au programme que l'on veut gérer, JConsole montre une fenêtre qui récapitule ce qui se passe sur l'instance sur laquelle on est connecté.
Onglet Memory, vue de la mémoire et actions

 L'onglet Memory affiche une vue détaillée de la mémoire de la JVM mais ce qui est important est la présence du bouton Perform GC, JMX permet donc, non seulement d'interroger une machine distante mais également lui donner l'ordre d'executer certaines actions.
Les autres onglets sont des vues détaillées des autres fonctions.
L'onglet MBeans par contre a un intérêt tout particulier car il dévoile le fonctionnement JMX et il a la particularité d'être dynamique. Si d'aventure dans un programme on rajoute des MBeans ( pour Managed Beans) JConsole sera capable de les voir et d'interragir avec.
Vue Arborescente et dynamique de la mémoire - Fonction gc

Ici on retrouve ce qu'on avait dans la vue "Memory", c'est moins lisible mais c'est un exemple d'affichage de tout ce que la JVM dévoile au grand jour. Ici, bien que le résultat soit le même par rapport à Perform GC dans l'onglet Memory, l'Opération gc() est listée en examinant le serveur.