JMeter OutOfMemory由于groovy脚本创建了几个类

问题描述 投票:1回答:1

我正在使用JMeter 3.1运行一些测试。其中一些测试使用JSR223 Sampler,它使用Groovy脚本来评估值并返回结果。

这些测试使用Java 8,更新112从客户端运行。

当我运行这些测试时,堆内存逐渐增加到引发Out of Memory异常和堆转储的程度。

我已经使用Java VisualVM来检查内存的进度,并且发现Loaded Classes不断增加,直到加载了100K +类。

因此,我使用-verbose:classes运行JMeter,并且有数千条关于加载“Script”类的行,如:

[Loaded Script1 from file: /groovy/script]
[Loaded Script2 from file: /groovy/script]
[Loaded Script3 from file: /groovy/script]
[...]
[Loaded Script2409 from file: /groovy/script]

等等。

有没有办法避免这种行为?我相信每次检查脚本时JMeter都会创建一个新的类定义,并且这些clases似乎永远不会从内存中卸载。

所有这些检查都是通过使用:

evaluate(new File("...\script.groovy"))

我自己没有完成script.groovy文件,但如果需要可以检查它。

编辑:我尝试使用一个空的groovy脚本进行全新的测试,并且类加载完全相同,因此它与脚本的内容无关。

java groovy jmeter visualvm jsr223
1个回答
1
投票

这是JMeter 3.1中使用的groovy版本的问题。

这个版本的JMeter现在很老了,你应该升级到JMeter 5.0或5.1(从现在开始几个小时内发布),它嵌入了更新版本的Groovy,修复了这个问题。

另请参阅使用Groovy的this

当使用Groovy作为脚本语言而不检查Cache编译脚本(如果可用)时(建议使用缓存),由于Groovy内存泄漏,您应该将此JVM属性设置为-Dgroovy.use.classvalue = true。

相关链接:

如果您想了解有关性能测试和JMeter的更多信息,这款book将为您提供帮助。

© www.soinside.com 2019 - 2024. All rights reserved.