我在Tomcat 6.0.35上运行了一个Web应用程序,该应用程序使用了Spring 3.1.2,Hibernate 4.1.8和MySQL Connector 5.1.21。
我一直试图找出导致Tomcat在重新部署之后继续耗尽内存(Perm Gen)的原因。
注意:不要告诉我增加Tomcat的JVM内存,因为那只会推迟,问题
具体来说,我使用了VisualVM工具,并且能够消除一些问题,包括一些mysql和google线程问题。我还能够发现并修复因使用Velocity作为Web应用程序中的单例而导致的问题,并且还没有在正确的时间/地点关闭我正在使用的一些线程局部变量。但我仍然无法消除/弄清楚这个Hibernate问题。
以下是我正在做的事情:
我的第一个观察是原始webapp的WebappClassLoader没有被垃圾收集。
当我仔细检查来自第二个HeapDump的保留对象时,类org.hibernate.internal.SessionFactoryImpl的显着特征使我相信它不会被Spring销毁/关闭或沿着这些行(因此WebappClassLoader)仍然提到它。)
是否有人遇到此问题并确定了正确的解决方法?