内存不足:使用wildfly和groovy / jasper的元空间

时间:2016-10-15 12:21:25

标签: java groovy jvm jasper-reports wildfly

在我们的Wildfly 10应用程序服务器上,我们使用groovy进行jasperreports和其他类似的系统。 经过一段时间后,jvm(java 8)得到了一个" Out of Memory:metaspace"错误。 在一些使用permgen的旧jboss 4服务器上也会出现同样的问题(java 6)。 我们将jasperreports从3.7.2升级到6.3.1,问题仍然存在。 permgen / metaspace的大小足够大(最大512 MB)。

我们的其他不使用jasperreports和groovy的应用程序没有这个问题。

经过一些研究后,我发现这可能是类加载器中的内存泄漏(stackoverflow question)。似乎gc不会卸载从groovy生成的类。

在他们写的jaspersoft documentation上,您应该将-XX:+UseConcMarkSweepGC-XX:+CMSClassUnloadingEnabled设置为VM参数以启用类卸载。

所以我们改变了它,但问题仍然存在。 Java 8是否仍支持这些参数?如果没有,还有其他解决方案。 目前我们必须每晚重启服务器以避免此问题。

1 个答案:

答案 0 :(得分:0)

正如杜兰达尔(Durandal)在问题评论中提到的那样,堆转储中有很多“ sun / reflect / DelegatingClassLoader”和“ org / codehaus / groovy / runtime / callsite / CallSiteClassLoader”条目。似乎groovy存在一些内存泄漏问题。对于jasper报告,我们将脚本工程从groovy更改为Java,而对于其他系统,则将javascript进行了更改。这样就解决了问题。感谢您的帮助。