Java : analyser le heap d'une application
- Dimanche 17 mai 2009
- Publié dans Développement
- Par Boris HUISGEN
- Ecrire
La version 1.6 de la machine Java de Sun intégre un outil permettant d’analyser le heap d’une application : jhat. Il permet par exemple de vérifier quelles sont les instances vivantes des objets dans le heap, le nombre de créations d’instances pour un object donné, un historique de création … Bref, un outil simple pour profiler un minimum son soft et éviter les messages de ce genre (c’est pour l’exemple) :
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
En premier lieu sous Mac OS X, cet outil ne fonctionne pas out of the box, il faut installer un moteur JavaScript (celui d’Apple lance une exception au lancement de jhat). Pour installer un autre moteur JS, téléchargez les 2 archives suivantes :
- JSR-223′s engines : https://scripting.dev.java.net/files/documents/4957/37593/jsr223-engines.zip
- Rhino : http://www.mozilla.org/rhino/download.html
$ sudo cp ~/Desktop/jsr223-engines/javascript/build/js-engine.jar /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/lib/ext/ $ sudo cp ~/Desktop/rhino1_7R2/js.jar /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/lib/ext/
Le nouveaux moteur JS Rhino doit à présent être listé par jrunscript :
$ /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Commands/jrunscript -q Language EmbeddedECMAScript 1.6 implemention "Mozilla Rhino" 1.6 release 2 Language AppleScript 2.0.1 implemention "AppleScriptEngine" 1.0 Language ECMAScript 1.6 implemention "Mozilla Rhino" 1.6R7
Pour lancer l’analyse du heap d’une application, il est nécessaire de récupérer son PID par jps, pour le passer à jmap qui va dumper le heap dans un fichier. Une fois créé, on peut l’analyser avec jhat :
$ /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Commands/jps 22746 Jps 22716 Application 45737 $ /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Commands/jmap -dump:format=b,file=dump.dat 22716 Dumping heap to /Users/bhuisgen/dump.dat ... Heap dump file created $ /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Commands/jhat -J-Xmx512m dump.dat Reading from dump.dat... Dump file created Sun May 17 18:22:24 CEST 2009 Snapshot read, resolving... Resolving 160010 objects... Chasing references, expect 32 dots................................ Eliminating duplicate references................................ Snapshot resolved. Started HTTP server on port 7000 Server is ready.
Rendez-vous @ http://127.0.0.1:7000 pour consulter les résultats : nombres d’instances créées, histogramme de création, et un query browser OQL qui permet de faire ses propres requêtes d’analyse (à tester absolument).
Quelques screenshots de démo :





Pas encore de commentaires.