我知道我有 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/