To track a permgen space OOM in our Tomcat tomcat-6.0.28 dev environment, we added TraceClassloading, TraceClassUnloading and JMX monitoring. The server has three webapps (devapp1,2,3) with almost identical frameworks and libraries (Spring, Hibernate, Axis etc.).I was expecting each class to be loaded exactly once for each of these apps, but the traceclassloading logs show the same class being loaded twice per webapp.
Example (the actual log entries were scattered over time, clubbed them for clarity)
[Loaded org.springframework.aop.framework.AdvisorChainFactory from file:/appl/devapp/tomcat/server/devapp/webapps/devapp3/WEB-INF/lib/spring-aop-3.0.6.RELEASE.jar]
[Loaded org.springframework.aop.framework.AdvisorChainFactory from file:/appl/devapp/tomcat/server/devapp/webapps/devapp3/WEB-INF/lib/spring-aop-3.0.6.RELEASE.jar]
[Loaded org.springframework.aop.framework.AdvisorChainFactory from file:/appl/devapp/tomcat/server/devapp/webapps/devapp2/WEB-INF/lib/spring-aop-3.0.6.RELEASE.jar]
[Loaded org.springframework.aop.framework.AdvisorChainFactory from file:/appl/devapp/tomcat/server/devapp/webapps/devapp2/WEB-INF/lib/spring-aop-3.0.6.RELEASE.jar]
[Loaded org.springframework.aop.framework.AdvisorChainFactory from
file:/appl/devapp/tomcat/server/devapp/webapps/devapp1/WEB-INF/lib/spring-aop-3.0.6.RELEASE.jar]
[Loaded org.springframework.aop.framework.AdvisorChainFactory from
file:/appl/devapp/tomcat/server/devapp/webapps/devapp1/WEB-INF/lib/spring-aop-3.0.6.RELEASE.jar]
However, the JVisualVM "Total Loaded" count seems to be close to the calculated value (~18700), and doesn't show duplicates. The MaxPermSize was set at 128M and now it hovers around 119M after server running for a day. Please let me know what could cause this discrepancy between TraceClassLoading and JVisualVM count, and how to confirm if the permgen space that's taken up contains duplicates or not?