La nouvelle est passée presque inaperçue : Java Mission Control est disponible dans le JDK7 u40. Tous ceux qui sont confrontés à des problématiques de performance ou d’optimisation au sein de leur application java vont apprécier
: Ils avaient jusqu’à présent le choix entre le profiler intégré dans leur IDE préféré, ou des outils commerciaux du genre jProfiler, YouKit etc… L’inconvénient majeur ces outils est leur impact sur le programme monitoré, que ce soit sur la rapidité d’exécution et/ou leur taille mémoire.
Java Mission Control est outil qui était déjà disponible depuis longtemps sur JRockit. Comme jvisualvm il permet de suivre les informations classiques de la jvm (cpu, mémoire, gc, mbeans, threads …). La valeur ajoutée est sur les fonctions de profiling : On y retrouve les toutes les fonctions des profilers classiques (cpu, mémoire), avec un impact beaucoup (!) plus faible (moins de 2% selon oracle) que les profilers classiques. Cerise sur le gâteau, si vous utilisez Java sur solaris, il y a un plugin avec Dtrace ce qui permet d’avoir une vision à la fois applicative de l’application, mais également de son impact sur le système. Pour profiter de jmc, il faut tout de même ajouter sur la ligne de commande de la jvm
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder
Pour conclure, les développeurs java n’ont plus l’excuse du “je ne peux pas profiler le serveur d’app parceque ça trop sur mon pc” car ils disposent désormais d’un outil pour optimiser une application. Pour ceux qui ont accès à la prod et qui doivent investiguer l’origine des problèmes de performance ou de stabilité, c’est un nouvel outil qui n’a pas d’équivalent : On vient de dépanner un client (site internet 10 frontaux jetty/spring/jsf) qui avait un problème récurrent de memory leak sur son appli. On a observé une instance de son appli (relativement 60% cpu et heap de 2Go avec beaucoup de phases de gc) avec jmc et trouvé le problème rapidement, là ou c’était impossible avec les outils traditionnels à cause de leur impact sur les performances.
A mettre d’urgence entre toutes les mains …