6

经过几天的调试,我成功地在 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:

4

2 回答 2

2

这是 EL 实现中的一个实际错误,已在最新的 Jetty 版本中解决。

7.5.0 版一经发布,将包含该修复程序。

于 2011-07-29T08:32:50.967 回答
0

不是您问题的直接答案,但您可以考虑在开发中使用JRebel。使用 JRebel,您几乎不必重新部署,从而避免 permgen 泄漏和重新部署浪费的时间。它对我来说非常有效。

于 2011-07-25T16:05:11.710 回答