为什么使用Groovy脚本时内存不足?

JFrog支持
2016-10-06 38

有一个已知的内存泄漏漏洞与Groovy和ConfigSlurper()有关。解析方法。增加MaxPermSize不能解决这个问题。


我们通过创建一个虚拟插件来重现这个问题,该插件在每个事件上调用类似的代码。

由于您正在解析一个固定的脚本,因此每次都会得到相同的结果,因此您应该尝试找到某种方法来只解析一次文件。


例如,你可以在脚本中添加如下代码:

def config = ConfigHolder。配置类ConfigHolder {static def config= new ConfigSlurper()。parse(new File("${System.properties.'artifact .home'}/etc/plugins/a.properties"). tourl ())}


在我们的例子中,'a.properties'将是一些静态的'*。属性的文件。您可以在定义之外的静态块中执行slurp方法,以便在加载到内存中时只执行一次。然后您可以引用结果的“config”对象,而不是多次调用slurp。


你应该修改你的代码,对你的插件中引用的任何静态资源使用类似的策略,这些资源目前正在被多次解析2022世界杯阿根廷预选赛赛程


这个groovy插件处理问题:(声明在132行,定义在584行)


下面是关于这个问题的Stackoverflow链接。