Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 由于groovy脚本创建了几个类,JMeter OutOfMemory_Java_Groovy_Jmeter_Visualvm_Jsr223 - Fatal编程技术网

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

Java 由于groovy脚本创建了几个类,JMeter OutOfMemory,java,groovy,jmeter,visualvm,jsr223,Java,Groovy,Jmeter,Visualvm,Jsr223,我正在使用JMeter3.1运行一些测试。其中一些测试使用JSR223采样器,该采样器使用Groovy脚本计算值并返回结果 这些测试是使用Java8更新112从客户机运行的 当我运行这些测试时,堆内存逐渐增加到引发内存不足异常和堆转储的程度 我使用JavaVisualVM检查了内存的进度,发现加载的类不断增加,达到100K+个加载的类 因此,我使用-verbose:classes运行JMeter,关于加载“Script”类有数千行,如: [Loaded Script1 from file: /g

我正在使用JMeter3.1运行一些测试。其中一些测试使用JSR223采样器,该采样器使用Groovy脚本计算值并返回结果

这些测试是使用Java8更新112从客户机运行的

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

我使用JavaVisualVM检查了内存的进度,发现加载的类不断增加,达到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会在每次检查脚本时创建一个新的类定义,而且这些类似乎永远不会从内存中卸载

所有这些检查均通过以下方式完成:

evaluate(new File("...\script.groovy"))
我自己还没有完成script.groovy文件,但如果需要,可以检查它


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

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

JMeter的这个版本现在已经很旧了,您应该升级到JMeter 5.0或5.1(几小时后发布),它嵌入了Groovy的最新版本,在这些版本中这个问题已经得到了解决

另请参见关于使用Groovy的说明

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

相关链接:


如果您希望了解有关性能测试和JMeter的更多信息,这将对您有所帮助。

在5.1版上重复相同的测试后,内存使用率已从5GB和OOM下降到1GB以下,在2小时内绝对稳定。版本之间的改进非常引人注目。好消息!谢谢你的反馈