经过几天的调试,我成功地在Tomcat 6.0.32上重新部署了一款中大型Web应用程序,而没有出现任何PermGen泄漏。当它被填满时,我看到了PermGen的下降,并且类加载器被垃圾回收了。
在庆祝了很久之后,我尝试在我们的开发环境(由Maven和Jetty插件组成)上使应用程序重新部署,以避免泄漏。
不幸的是,我似乎遇到了服务器限制,如下面的截图所示。
Jetty请求线程对BeanElResolver有一个强引用,而BeanElResolver又对我的Web应用程序中的多个类有一个强引用。
我找不到如何清除这些信息的参考。
我该如何从我的应用程序中移除这个最终的PermGen泄漏?
在庆祝了很久之后,我尝试在我们的开发环境(由Maven和Jetty插件组成)上使应用程序重新部署,以避免泄漏。
不幸的是,我似乎遇到了服务器限制,如下面的截图所示。
Jetty请求线程对BeanElResolver有一个强引用,而BeanElResolver又对我的Web应用程序中的多个类有一个强引用。
我找不到如何清除这些信息的参考。
我该如何从我的应用程序中移除这个最终的PermGen泄漏?
更新:
我尝试了以下方法来解决问题,但都没有成功:
- 升级到最新版本的Jetty插件(7.4.5和8.0.0.M3)
- 使用CMS收集器:
-XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled
更新 2:
- 我已在 Jetty 问题跟踪器上报告了此 bug: maven-jetty-plugin: PermGen泄漏由于javax.el.BeanELResolver