Nous avons une application j2ee fonctionnant sur Jboss et nous voulons surveiller son utilisation de la mémoire. Actuellement, nous utilisons le code suivant
System.gc();
Runtime rt = Runtime.getRuntime();
long usedMB = (rt.totalMemory() - rt.freeMemory()) / 1024 / 1024;
logger.information(this, "memory usage" + usedMB);
Ce code fonctionne bien. Cela signifie qu'il montre une courbe de mémoire qui correspond à la réalité. Lorsque nous créons un gros fichier xml à partir d'une base de données, la courbe monte, puis elle descend une fois l'extraction terminée.
Un consultant nous a dit qu'appeler gc() explicitement est une erreur, "laissez le jvm décider quand lancer gc". En gros, ses arguments étaient les mêmes que discuté ici . Mais je ne comprends toujours pas :
- comment puis-je avoir une courbe d'utilisation de la mémoire ?
- qu'est-ce qui ne va pas avec le gc() explicite ? Je ne me soucie pas des petits problèmes de performance qui peuvent survenir avec la méthode gc() explicite et que j'estimerais à 1-3%. Ce dont j'ai besoin, c'est d'un moniteur de mémoire et de threads qui m'aide à analyser notre système sur le site du client.
1 votes
Surveiller avec jvisualvm - donne de meilleures statistiques.