Question

J'ai réussi à avoir une fuite de mémoire dans une application Java que je développe. Lorsque j'exécute ma suite de tests JUnit, les exceptions de mémoire (java.lang.OutOfMemoryError) sont supprimées de manière aléatoire.

Quels outils puis-je utiliser pour examiner le tas de mon application java et voir ce qui utilise tout mon tas afin de pouvoir déterminer ce qui est de conserver des références à des objets qui devraient pouvoir être récupérés.

Était-ce utile?

La solution

VisualVM est inclus dans les versions les plus récentes de Java. Vous pouvez l'utiliser pour créer un vidage de tas et examiner les objets qu'il contient.

Vous pouvez également créer une commande Heapdump à l’aide de jmap (dans votre répertoire jdk / bin):

jmap -dump:format=b,file=heap.bin <pid>

Vous pouvez même l'utiliser pour obtenir un histogramme rapide de tous les objets

jmap -histo <pid>

Je peux recommander Eclipse Memory Analyzer ( http://eclipse.org/mat ) pour une analyse avancée du tas. décharges. Il vous permet de savoir exactement pourquoi un objet ou un ensemble d'objets est actif. Voici une entrée de blog vous montrant ce que Memory Analyzer peut faire: http://dev.eclipse.org/blogs/memoryanalyzer/2008/05/27/automated-heap-dump-dump-analysis-finding-memory-leaks-with- un clic /

Autres conseils

Si vous avez besoin de quelque chose de gratuit, essayez VisualVM

.

D'après la description du projet:

  

VisualVM est un outil visuel intégrant des outils JDK en ligne de commande et des fonctionnalités de profilage allégées. Conçu pour le développement et l’utilisation du temps de production.

C'est une très vieille question. De nombreuses personnes ont peut-être commencé à utiliser IntelliJ depuis sa réponse initiale. IntelliJ a un plugin qui peut montrer l'utilisation de la mémoire, appelé Vue de la mémoire du débogueur JVM .

Utilisez un profileur tel que JProfiler ou YourKitProfiler

JProfiler a très bien fonctionné pour moi ....

http://www.ej-technologies.com/products/jprofiler /overview.html

Utilisez l'analyseur de mémoire Eclipse

.

À ma connaissance, aucun outil ne se rapproche de ses fonctionnalités, de ses performances et de son prix (libre et open source) lors de l'analyse des vidages de segments de mémoire.

Si vous utilisez un système prenant en charge GTK, vous pouvez utiliser JMP .

Vous pouvez essayer le détecteur de fuite de mémoire qui fait partie de la suite d'outils JRockit Mission Control. Cela vous permet d'inspecter le tas pendant l'exécution de la machine virtuelle Java. Vous n'avez pas besoin de prendre des instantanés tout le temps. Vous pouvez simplement vous connecter en ligne à la machine virtuelle Java, puis voir comment le segment de mémoire change entre les collectes de mémoire. Vous pouvez également inspecter des objets, suivre des références graphiquement et obtenir des traces de pile à partir desquelles votre application alloue actuellement des objets. Voici une brève introduction .

Cet outil est gratuit pour le développement et vous pouvez le télécharger ici .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top