0

我有一个在 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 线程问题。我还能够发现并修复由于在 Web 应用程序中使用 Velocity 作为单例而导致的问题,并且也没有在正确的时间/位置关闭我拥有的一些线程局部变量。但我仍然不能完全消除/找出这个休眠问题。

这是我正在做的事情:

  1. 从我的开发 IDE 部署我的 webapp
  2. 在我的浏览器中打开一个 tomcat 管理器窗口
  3. 启动 VisualVM 并获取 tomcat 实例上的 HeapDump
  4. 去tomcat管理器并重新部署我的webapp
  5. 在 VisualVM 中使用另一个 HeapDump

我的第一个观察是原始 webapp 的 WebappClassLoader 没有被垃圾收集。

当我检查来自第二个 HeapDump 的保留对象时,org.hibernate.internal.SessionFactoryImpl 类具有显着的特征,这让我相信它没有被 Spring 或类似的东西破坏/关闭(因此 WebappClassLoader 仍然有一个参考它)。

有没有人遇到过这个问题并确定了正确的解决方法?

4

1 回答 1

1

我目前不知道您的设置可能有什么问题,但我知道使用Plumbr您很可能会找到实际的泄漏。

于 2012-12-24T12:15:55.097 回答