Java 类 (PermGen) 内存泄漏(Web 应用程序)- 通用解决方案?

标签 java garbage-collection permgen

我知道我有 perm gen 内存泄漏。使用 jvisualvm 进行的分析表明,在进行热部署时(例如,在 tomcat、WebSphere、WebLogic 等中停止和启动应用程序而不终止 JVM)- PermGen 空间不断增加。

在阅读、使用 jhat 和其他高级工具后,我意识到我可能在其父类加载器的某处引用了一个类的 WebAppClassLoader

即使我在 jhat 上做了一些基于 JavaScript 的大量查询,我也无法确定它

难道没有一个简单的实用程序可以找出谁负责让您的类加载器不被垃圾回收(从而允许对它加载的类进行垃圾回收)?

我尝试了 JProfiler、jvisualvm、jhat 和很多 Google

致所有 LMGTFY friend - 我花了大约一天半的时间阅读论坛的逐步说明,但运气不佳。我正在寻找输出的实用程序或代码:

Y 类的对象 X 是唯一防止您的类被删除的 GC 根。

最佳答案

有一个不令人满意但简单的解决方案:不要在生产环境中热部署。您可以设置一个由两个 servlet 容器组成的集群,它们在重启时一次更新一个。

关于Java 类 (PermGen) 内存泄漏(Web 应用程序)- 通用解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1996088/

相关文章:

java - 通过 GarbageCollectorMXBean 确定 GC 类型

java - 如何在android中以编程方式使用HFP-bluetooth连接到远程电话

java - 在 Jenkins 上构建时,单元测试没有重置上下文?

java - Java 打印非英文字符不正确

wcf 在没有内存分配的情况下反序列化

garbage-collection - 为什么需要 3 次 Full GC 来对 permgen 进行垃圾回收?

java - 使用 Solrj 进行基本身份验证时,出现错误 "Caused by: java.net.SocketException: Connection reset"

java - 幸存者空间达到 100% 满的原因是什么

java - 强制急切初始化 Tomcat 处理的数据源

tomcat - 在容器环境中优雅地停止 Logback