How to analyze PermGen contents?

后端 未结 4 916
时光取名叫无心
时光取名叫无心 2020-11-28 04:57

I want to get a dump of the PermGen to see why it is filling. Is there a way to analyze this? I already know about the common suspects like log4j, tomcat webapp reloading et

相关标签:
4条回答
  • You can use the flags:

    -XX:+TraceClassLoading -XX:+TraceClassUnloading
    

    They print the identities of classes as they get loaded/unloaded from the permanent generation. If you add -XX:+PrintGCDetails you can also track the size of the permgen.

    Note that i'm not sure the flags are supported in JVMs other than Sun's.

    Another suspect of PermGen out-of-memory-errors is string interning. Check the places where you intern strings in your code.

    0 讨论(0)
  • 2020-11-28 05:41

    If you're looking to get a list of all classes loaded you can use jconsole. Click on the classes tab then click "Verbose Output". That will print each class that is loaded to stdout. I found this very useful tracking down a JAXB proxy class issue.

    You may have to launch your application with the -Dcom.sun.management.jmxremote command line option in order for jconsole to attach to it.

    0 讨论(0)
  • 2020-11-28 05:41

    Will jmap -permgen fit the bill?

    See the troubleshooting guide for Java http://java.sun.com/javase/6/webnotes/trouble/TSG-VM/html/memleaks.html#gbyuu

    0 讨论(0)
  • 2020-11-28 05:46

    The PermGen normally consists of the string literal pool and loaded classes. To answer part of your problem, i.e. the string literal pool I wrote a utility to print a running JVM's string literal pool. It is available here:

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

    It is based on PermStat, which is the class used to print permgen stats by the jmap tool.

    0 讨论(0)
提交回复
热议问题