【发布时间】:2014-04-05 18:36:23
【问题描述】:
在多次重新部署后,应用程序因 PermGen 错误而崩溃。我知道增加 permgen 大小的解决方法。但我试图揭示泄漏的原因。重新部署后,我使用 jvisualvm 进行了堆转储并搜索 WebAppClassLoader 的实例。正如预期的那样,有一个不是 GC-ed。显示到 platformMBeanServer(MangementFactory 类型)最近的 GC 根点。所以问题是我能用它做什么?
还有一些额外的信息。我的 jdbc 驱动程序 jar 位于 tomcat 的 lib 目录和 bin 目录中的 .dll 文件中。当我评论 hibernate sessionFactory 创建时 - 问题消失了。会话工厂在 servlet 过滤器的 init 方法中创建,并在 destroy 方法中关闭。 Hibernate 使用 c3p0 连接池。
【问题讨论】:
-
你需要遵循 GC 根。他们是否将您指向那个特定的对象,或者您只是在猜测?尝试阅读people.apache.org/~markt/presentations/…,了解如何定位此类内存泄漏。
标签: java hibernate jakarta-ee tomcat jvisualvm