Java 使用Jetty 7解决重新部署时的PermGen问题
经过几天的调试,我成功地在Tomcat 6.0.32上重新部署了一个中大型web应用程序,并且没有任何Java 使用Jetty 7解决重新部署时的PermGen问题,java,maven,jetty,el,permgen,Java,Maven,Jetty,El,Permgen,经过几天的调试,我成功地在Tomcat 6.0.32上重新部署了一个中大型web应用程序,并且没有任何PermGen泄漏。我看到PermGen在填充后掉落,类装入器被垃圾收集 在非常高兴之后,我尝试在开发环境中重新部署应用程序,而不泄露我们的开发环境是由Maven和Jetty插件组成的 不幸的是,我似乎遇到了服务器限制,如下面的屏幕截图所示 Jetty请求线程强烈引用了一个BeanElResolver,它反过来又强烈引用了我的webapp中的多个类 我没有找到关于如何刷新此信息的参考资料 如何
PermGen
泄漏。我看到PermGen
在填充后掉落,类装入器被垃圾收集
在非常高兴之后,我尝试在开发环境中重新部署应用程序,而不泄露我们的开发环境是由Maven和Jetty插件组成的
不幸的是,我似乎遇到了服务器限制,如下面的屏幕截图所示
Jetty请求线程强烈引用了一个BeanElResolver
,它反过来又强烈引用了我的webapp中的多个类
我没有找到关于如何刷新此信息的参考资料
如何从应用程序中删除此最终PermGen
泄漏
更新: 我已经做了以下工作来解决问题,但运气不好:
- 更新至Jetty插件的最新版本(7.4.5和8.0.0.M3)
- 已使用CMS收集器:
-XX:+UseConMarkSweepGC-XX:+CMSClassUnloadingEnabled
更新2:
- 我已将此报告为Jetty问题跟踪程序上的一个错误:
不是直接回答你的问题,但是你可以考虑在JRebel中使用DeV.,你不必重新部署,这样既避免了PimMGEN泄漏,又避免了重新部署的浪费时间。这对我来说非常好。
这是EL实现中的一个实际缺陷,在最新的Jetty版本中得到了解决7.5.0版一旦发布,将包含修复程序。我不理解您的措辞。你说的永久渗漏是什么意思?您是否尝试向VM提供与soem GC相关的标志,如:-XX:+cmsPermGensWeapingEnabled-XX:+CMSClassUnloadingEnabled?您是否希望在没有连接/会话启动时完全收集正在运行的web应用程序?Angel:默认情况下,每次重新部署时,您的servlet容器都会泄漏类加载器。类定义是在永久生成之外分配的,所以您将得到一个PermGen泄漏。我印象深刻的是,OP设法用Tomcat 6和没有标志来规避这个问题。罗伯特:请考虑告诉我们更多关于你在Tomcat 6中修复漏洞的方法。我很想知道你做了什么。Wiki,也许?@Angel:我不使用CMS垃圾收集器,所以我不需要指定那些标志。对于PermGen leak,我的意思是,在取消部署时,旧的类加载器实例仍固定在内存中,不允许对类进行垃圾收集。这就是为什么我建议使用另一个GC,标准GC根本不收集PermGen,IIRC。我已经使用JRebel,但a)我有时不得不重新启动,b)我的团队中并非每个人都这样做,因此我也需要为他们找到更好的解决方案。