Java类(PermGen)内存泄漏(Web应用程序)

我知道,我有一个烫发内存泄漏。 使用jvisualvm进行分析表明,在进行热部署时(例如,在不杀死JVM的情况下停止和启动应用程序,在tomcat,WebSphere,WebLogic等中) - PermGen空间不断增加。

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

即使我在jhat上进行了一些基于JavaScript的大规模查询,我也无法将其归结

是不是有一个简单的工具,找出谁是负责你的类加载器不被垃圾收集(从而允许垃圾收集类加载的类)?

我试过JProfiler,jvisualvm,jhat和很多Google

给所有的LMGTFY朋友 - 我已经花了大约一天半的时间阅读论坛,一步一步的说明,没有运气。 我正在寻找一个实用程序或代码输出:

Y类的对象X是唯一的GC根,它可以让您的类不被删除。


有一个令人满意但很容易的解决方案:不要在生产环境中进行热部署。 您可以设置两个servlet容器的集群,并且每次都重新启动一个集群。


频繁重新部署的现实...你可以做的最好的事情是使用-XX:MaxPermSize = 256m来增加烫发的尺寸。 这可能会为每个jvm重新启动更多的重新部署。 或者阅读http://my.opera.com/karmazilla/blog/2007/03/15/permgen-strikes-back

请注意,如果类加载器根本无法使用,那么摆弄jvm根本无济于事。 你最好忘记频繁部署,尤其是在生产中,尽管如此,它还是很方便的。


我使用这个网站的方法,它有帮助。 http://www.mkyong.com/tomcat/tomcat-javalangoutofmemoryerror-permgen-space/

链接地址: http://www.djcxy.com/p/54983.html

上一篇: Java Class (PermGen) Memory Leak (Web Applications)

下一篇: Run Java spring application