Comment analyser la PermGen contenu?
Je veux faire un dump de la PermGen de voir pourquoi il est le remplissage. Est-il un moyen pour analyser ce? Je sais déjà à propos de la commune de suspects comme log4j, tomcat webapp rechargement etc, mais j'ai quelques proxy personnalisé de génération de code dans mon application, trop, et vous voulez juste de regarder sous le capot.
Est-ce possible?
OriginalL'auteur Daniel | 2010-05-16
Vous devez vous connecter pour publier un commentaire.
La PermGen se compose normalement de la chaîne littérale de la piscine et des classes chargées. Pour répondre à la partie de votre problème, c'est à dire la chaîne de caractères littérale de la piscine, j'ai écrit un utilitaire pour imprimer une exécution de la JVM de la chaîne de caractères littérale de la piscine. Il est disponible ici:
https://github.com/puneetlakhina/javautils/blob/master/src/com/blogspot/sahyog/PrintStringTable.java
Il est basé sur PermStat, qui est la classe utilisée pour l'impression de permgen stats par l'outil jmap.
Pourriez-vous préciser comment pouvons-nous résoudre à "ajout de l'ID de processus XXXX, veuillez patienter... Erreur attacher à traiter: a expiré lors de la tentative de connexion au débogage du serveur (s'il vous plaît commencer SwDbgSrv.exe)." sur Windows lors de l'exécution de ce programme?
OriginalL'auteur Puneet
Vous pouvez utiliser les codes:
Ils imprimer les identités de classes comme ils se sont chargés/déchargés à partir de la génération permanente. Si vous ajoutez
-XX:+PrintGCDetails
vous pouvez également suivre la taille de la permgen.Remarque que je ne suis pas sûr que les drapeaux sont pris en charge dans les machines virtuelles autre que le Soleil.
Un autre suspect de PermGen de mémoire d'erreurs est chaîne de stage. Vérifier les endroits où vous stagiaire chaînes dans votre code.
vous avez raison, mais j'espérais que cela serait suffisant dans ce cas 🙂
accepté, parce que cela m'a aidé le plus, même si elle n'a pas complètement résoudre mon problème. J'ai trouvé que 160 MO pern gen étaient vraiment pas beaucoup", après avoir écrit un script qui analysée mon journal de sortie et compté la taille de toutes les classes chargées. (Lors de la lecture de mon commentaire, je vois au moins 2 WTFs)
OriginalL'auteur Eyal Schneider
Si vous êtes à la recherche pour obtenir une liste de toutes les classes chargées, vous pouvez utiliser
jconsole
. Cliquez sur l'onglet de classes, puis cliquez sur "Verbose Output". Imprimer chaque classe qui est chargé destdout
. J'ai trouvé cela très utile à la poursuite d'un JAXB proxy question de classe.Vous pouvez le lancer votre application avec le
-Dcom.sun.management.jmxremote
option de ligne de commande pourjconsole
à joindre à elle.Cela devrait imprimer les classes qui sont du remplissage de votre PermGen space qu'ils sont chargés. Pouvez-vous redémarrer votre application et tourner sur cet enregistrement?
Pas utile et en fait la même que fournir -XX:+TraceClassLoading -XX:+TraceClassUnloading de la première observation.
OriginalL'auteur mtpettyp
Sera
jmap -permgen
adapter le projet de loi?Voir le guide de dépannage pour Java
http://java.sun.com/javase/6/webnotes/trouble/TSG-VM/html/memleaks.html#gbyuu
Essayé d'utiliser
-permstat
, mais viens de recevoir:Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process
OriginalL'auteur Dilum Ranatunga