Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Jetty 7解决重新部署时的PermGen问题_Java_Maven_Jetty_El_Permgen - Fatal编程技术网

Java 使用Jetty 7解决重新部署时的PermGen问题

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中的多个类 我没有找到关于如何刷新此信息的参考资料 如何

经过几天的调试,我成功地在Tomcat 6.0.32上重新部署了一个中大型web应用程序,并且没有任何
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)我的团队中并非每个人都这样做,因此我也需要为他们找到更好的解决方案。