Question

Je veux obtenir un dépotoir du Permgen pour voir pourquoi il se remplit. Existe-t-il un moyen d'analyser cela? Je connais déjà les suspects communs comme LOG4J, le rechargement Tomcat WebApp, etc., mais j'ai aussi du code de génération de proxy personnalisé dans mon application, et je veux juste regarder sous le capot.

Est-ce possible d'une manière ou d'une autre?

Était-ce utile?

La solution

Le Permgen se compose normalement du pool littéral à chaîne et des classes chargées. Pour répondre à une partie de votre problème, c'est-à-dire le pool littéral à chaîne, j'ai écrit un utilitaire pour imprimer une piscine littérale à chaîne JVM en cours d'exécution. Il est disponible ici:

https://github.com/puneetlakhina/javautils/blob/master/src/com/blogspot/sahyog/printstringtable.java

C'est basé sur Permstat, qui est la classe utilisée pour imprimer les statistiques permanentes par l'outil JMAP.

Autres conseils

Vous pouvez utiliser les drapeaux:

-XX:+TraceClassLoading -XX:+TraceClassUnloading

Ils impriment l'identité des classes lorsqu'ils sont chargés / déchargés de la génération permanente. Si vous ajoutez -XX:+PrintGCDetails Vous pouvez également suivre la taille du permgen.

Notez que je ne suis pas sûr que les drapeaux soient pris en charge dans des JVM autres que celui de Sun.

Un autre suspect d'erreurs hors mémoire de Permgen est String Interning. Vérifiez les endroits où vous interdisez les chaînes de votre code.

Si vous cherchez à obtenir une liste de toutes les classes chargées, vous pouvez utiliser jconsole. Cliquez sur l'onglet Classes puis cliquez sur "Sortie verbale". Qui imprimera chaque classe qui est chargée pour stdout. J'ai trouvé ce suivi très utile dans un problème de classe proxy JAXB.

Vous devrez peut-être lancer votre application avec le -Dcom.sun.management.jmxremote Option de ligne de commande afin de jconsole pour s'y attacher.

Sera jmap -permgen adapter à la loi?

Voir le guide de dépannage pour Javahttp://java.sun.com/javase/6/webnotes/trouble/tsg-vm/html/memleaks.html#gbyuu

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