Hau*_*ern 5 java groovy jvm jasper-reports wildfly
在Wildfly 10应用服务器上,我们将groovy用于jasperreports和其他类似系统。一段时间后,jvm(java 8)出现“内存不足:元空间”错误。在一些具有permgen(java 6)的较旧的jboss 4服务器上也会发生相同的问题。我们将jasperreports从3.7.2升级到6.3.1,问题仍然存在。permgen / metaspace的大小足够大(最大512 MB)。
我们不使用jasperreports和groovy的其他应用程序不存在此问题。
经过一些研究,我意识到这可能是类加载器中的内存泄漏(stackoverflow问题)。看来gc不会卸载groovy生成的类。
在的JasperSoft的文档他们写,是ü应设置-XX:+UseConcMarkSweepGC并-XX:+CMSClassUnloadingEnabled为VM参数启用类卸载。
因此我们进行了更改,但问题仍然存在。Java 8仍然支持这些参数吗?如果没有,还有其他解决办法。当前,我们必须每天晚上重新启动服务器,以避免出现此问题。
正如 Durandal 在问题评论中提到的那样,堆转储中有很多“sun/reflect/DelegatingClassLoader”和“org/codehaus/groovy/runtime/callsite/CallSiteClassLoader”条目。看来 groovy 有一些内存泄漏问题。我们将 jasper 报告的 enginge 脚本从 groovy 更改为 java,将其他系统的 javascript 更改为 JavaScript。这解决了问题。谢谢您的帮助。