经过几天的调试,我成功地在 Tomcat 6.0.32 上成功地重新部署了一个中型到大型的 Web 应用程序,没有任何PermGen
泄漏。我看到PermGen
它填充后的下降,并且类加载器被垃圾收集。
在欣喜若狂之后,我尝试让应用程序重新部署而不会在我们的开发环境中泄漏,该开发环境由 Maven 和 Jetty 插件组成。
不幸的是,我似乎遇到了服务器限制,如下面的截图所示
Yourkit 快照 http://img811.imageshack.us/img811/7320/jettyclassloaderbeanelr.png
Jetty 请求线程对 a 有很强的引用,BeanElResolver
而后者又对我的 webapp 中的多个类有很强的引用。
我没有找到有关如何刷新此信息的参考。
如何PermGen
从我的应用程序中删除这个最终泄漏?
更新:
我已完成以下操作来解决问题,但没有运气:
- 更新到最新版本的 Jetty 插件(7.4.5 和 8.0.0.M3)
- 使用 CMS 收集器:
-XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled
更新 2:
- 我已将此报告为 Jetty 问题跟踪器上的错误:maven-jetty-plugin: PermGen leak due to javax.el.BeanELResolver