web-dev-qa-db-fra.com

Comment trouver des fuites de mémoire à l'aide de visualvm

Je soupçonne que nous avons une fuite de mémoire importante dans notre pont de connexion ActiveMQ - nous voyons des modèles de fuite de mémoire typiques (l'application se charge correctement, ralentit si elle fonctionne pendant des périodes prolongées ou est redémarrée maintes et maintes fois sur de courtes périodes) . J'ai recherché les meilleures pratiques modernes pour trouver Java fuites de mémoire et beaucoup de développeurs semblent abandonner les outils traditionnels comme jhat/jmap au lieu du nouveau (er) jvisualvm.

En lançant cet outil (et en passant quelques heures à lire son tutoriel), je suis capable de prendre des instantanés de profileur pour le CPU et la mémoire.

Je suis juste un peu bloqué à ce stade - comment puis-je analyser ces instantanés pour identifier la fuite? Il existe une pléthore de documentation sur la façon d'utiliser jvisualvm pour produire des instantanés, mais très peu de documentation sur la façon de leur donner un sens.

Merci d'avance.

23
IAmYourFaja

L'analyse d'une fuite de mémoire à l'aide de visualvm n'est pas si simple. Il a un outil/plugin appelé "sampler". Cela peut être utilisé pour échantillonner la mémoire ou le processeur. Vous pouvez prendre un instantané à intervalles réguliers et rechercher d'éventuelles fuites. Voici quelques détails sur son utilisation - Obtenu depuis recherche rapide

Le moyen le plus efficace sera d'obtenir un vidage de tas (par exemple, lorsque l'application a ralenti ou quand le MOO se produit ). VisualVM vous aide à prendre le heapdump (en utilisant Heap Dump sur Monitor tab)

Ce fichier peut être analysé par MAT - Certains détails sont ici à Comment puis-je analyser un fichier .hprof? et http://memoryanalyzer.blogspot.in/

27
Jayan