在我们的Wildfly 10应用服务器上,我们使用Groovy来处理JasperReports和其他类似系统。一段时间后,jvm(Java 8)会出现“Out of Memory:metaspace”错误。在某些旧的JBoss 4服务器上也会出现相同的问题,这些服务器使用PermGen(Java 6)。我们将JasperReports从3.7.2升级到6.3.1,但问题仍然存在。PermGen / Metaspace的大小足够大(最大512 MB)。
我们的其他不使用JasperReports和Groovy的应用程序没有这个问题。
经过一些研究,我发现这可能是类加载器中的内存泄漏(stackoverflow question)。看起来gc无法卸载从Groovy生成的类。
在jaspersoft documentation上,他们写道,您应该将
我们的其他不使用JasperReports和Groovy的应用程序没有这个问题。
经过一些研究,我发现这可能是类加载器中的内存泄漏(stackoverflow question)。看起来gc无法卸载从Groovy生成的类。
在jaspersoft documentation上,他们写道,您应该将
-XX:+UseConcMarkSweepGC
和-XX:+CMSClassUnloadingEnabled
设置为VM参数以启用类卸载。
所以我们进行了更改,但问题仍然存在。 Java 8仍支持这些参数吗?如果不支持,是否有其他解决方案。 目前我们每晚都必须重新启动服务器以避免这个问题。