La meilleure façon de profiler l'utilisation de la mémoire dans une application Java?


Je me rends compte que des questions similaires ont déjà été posées à ce sujet ici sur SO, mais laissez-moi décrire exactement ce que je dois faire:

J'ai un ensemble de tests qui exécutent une application java en ligne de commande et je voudrais leur ajouter un profilage de mémoire. Une option que je vois serait d'ajouter du code (éventuellement en utilisant des outils/bibliothèques tiers) à mon application qui fournirait un instantané de mémoire. Une autre option serait d'utiliser un outil tiers qui gère / instrumente mon application et la JVM pour moi (et idéalement ne m'oblige pas à changer mon code). Je pense à quelque chose comme Valgrind mais pour Java. Aussi open source si possible.

Ce que j'aimerais vraiment faire, c'est configurer les tests de mémoire afin que mon utilisation de la mémoire soit surveillée à intervalles réguliers, disons chaque seconde, et vidée dans un fichier texte. De cette façon, je pourrais voir si l'utilisation de la mémoire oscille/augmente/diminue avec le temps. Je vais également pouvoir calculer les pics max et min.

A quelqu'un ici a fait quelque chose comme ça?

Merci d'avance.

Author: rlbond, 2009-04-16

9 answers

Avec quelque chose comme JProfiler tout ce que vous devez faire est d'ajouter certains paramètres à la JVM. Il utilise JVMTI.

Je pense que vous devriez lire sur les profileurs et exactement ce qu'ils peuvent faire pour vous. Je suggère également de lire sur JVMTI.

L'interface JVMTM Tool (JVM TI) est une nouvelle interface de programmation native pour les outils. Il fournit à la fois un moyen d'inspecter l'état et de contrôler l'exécution des applications exécutées dans la machine virtuelle Java (JVM). JVM TI prend en charge le étendue des outils nécessitant un accès à l'état JVM, y compris, mais sans s'y limiter, les outils de profilage, de débogage, de surveillance, d'analyse de threads et d'analyse de couverture.

Remarque: JVM TI remplace l'interface Java Virtual Machine Profiler (JVMPI) et l'interface Java Virtual Machine Debug (JVMDI). JVMPI et JVMDI seront supprimés dans la prochaine version majeure de J2SETM.

 16
Author: Peter D, 2009-04-16 16:21:29

Yourkit a également un très bon profileur

 6
Author: Rad, 2009-04-16 16:30:21

Avez-vous vérifié

VisualVM et Eclipse-Callisto?

 4
Author: Liran Orevi, 2017-12-02 15:44:05

Un bon point de départ est de voir si votre JVM prend en charge "java-Xrunhprof" car cela peut générer des informations de profilage de tas sans rendre votre scénario plus complexe.

Voir http://docs.oracle.com/javase/7/docs/technotes/samples/hprof.html

Vous pourriez trouver cela assez pour vous pour commencer.

 3
Author: Thorbjørn Ravn Andersen, 2015-05-20 12:35:26

Plusieurs profileurs tels que yourkit ont des API pour tracer les allocations de mémoire. Une autre option ici sont des outils de surveillance tels que jxinsight ou glassbox ou jamon

Pour analyser les décharges de tas, Eclipse Memory Analyzer est le meilleur outil que vous pouvez obtenir. C'est gratuit et open source, vous pouvez donc automatiser l'analyse des décharges de tas autant que vous le souhaitez.

 2
Author: kohlerm, 2009-04-16 16:31:38

Je développe dans Eclipse mais j'ai Netbeans autour d'utiliser son excellent Profileur. Il est limité par rapport à certains commerciaux, mais toujours assez bon pour repérer la plupart des goulots d'étranglement

 2
Author: Matt Large, 2009-04-17 15:26:28

Vous pouvez utiliser jrcmd qui est un utilitaire de ligne de commande fourni avec la JVM JRockit. Si vous connaissez le pid du processus Java, vous pouvez simplement faire:

JROCKIt_HOME\bin\jrcmd <pid> print_object_summary

Et cela vous donnera:

31.8% 3198k    41907   -137k [C
11.9% 1196k      300     +0k [B
11.4% 1151k    49118     +6k java/lang/String
 6.1% 612k     5604     +0k java/lang/Class
 4.3% 431k     2388     +0k [I
 3.5% 353k    15097     +0k java/util/HashMap$Entry
 ...
 2
Author: Kire Haglin, 2009-04-30 21:57:26

En plus des réponses ci-dessus, j'ai également apprécié l'utilisation de profiler il y a quelques années. Ne sais pas si cela aide.

 1
Author: uriDium, 2009-04-16 16:36:17

Je recommande dynaTrace production edition. Outil incroyable pour profiler l'application de mémoire. Faible surcharge et 100% des transactions exécutées.

 1
Author: Andre Santos, 2013-03-11 14:36:36