经过几天的调试,我成功地在 Tomcat 6.0.32 上重新部署了一个大中型 Web 应用程序,没有任何 PermGen
。泄漏。我看到了 PermGen
填满后丢弃,类加载器被垃圾回收。
大喜过望后,我尝试在我们的开发环境中无泄漏地重新部署应用程序,该环境由 Maven 和 Jetty 插件组成。
不幸的是,我似乎遇到了服务器限制,如下面的屏幕截图所示
Yourkit snapshot http://img811.imageshack.us/img811/7320/jettyclassloaderbeanelr.png
Jetty 请求线程具有对 BeanElResolver
的强引用这反过来又强烈引用了我的网络应用程序中的多个类。
我没有找到关于如何刷新此信息的引用资料。
我怎样才能删除这个最后的 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
最佳答案
这是 EL 实现中的实际错误,已在最新的 Jetty 版本中解决。
7.5.0 版一旦发布,将包含此修复。
关于java - 解决使用 Jetty 7 重新部署时的 PermGen 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6818082/