Reputation: 15199
I'm investigating a memory leak in a Tomcat/Spring/Hibernate app which is causing the dreaded "out of permgen" error after a few redployments. I've downloaded the free version of plumbr, which confirms that I have a classloader leak, but unfortunately I can't afford the $499 to get the detailed report. Is there a free tool that can perform an equivalent analysis and tell me where to look for it? Or some other common cause of such leaks that I can investigate?
Steps I've taken so far:
What else might be causing the leak?
Upvotes: 13
Views: 4388
Reputation: 15199
I found that Eclipse's Memory Analysis Tools worked reasonably well. I set my server to produce a heap dump and used MAT (roughly following the guide here) to find all the classloaders. It seems the relevant one is org.apache.catalina.loader.WebappClassLoader
, and by listing their GC roots I was easily able to find out that my problem was being caused by java.util.logging.Level
which was indirectly referenced through an org.jboss.logging.JDKLevel
.
Now I just need to figure out how to prevent JBoss Logging doing this...
Upvotes: 5
Reputation: 48090
You can use the evaluation version of JProfiler to investigate the class loader leak. Go to the class loader probe, select one of the leaking class loaders and show them in the heap walker where you can investigate strong references to the classes that were loaded by the class loader.
There is a screen cast that shows you how to do this.
Disclaimer: My company develops JProfiler.
Upvotes: 5