在非gui模式和远程测试中使用JMeter执行脚本时我收到错误消息,如何解决问题
summary = 0 in 00:00:00 = ******/s Avg: 0 Min: 9223372036854775807 Max:
-9223372036854775808 Err: 0 (0.00%)
Tidying up remote @ Sun Jan 07 21:00:11 EST 2018 (1515376811888)
... end of run
The JVM should have exitted but did not.
The following non-daemon threads are still running (DestroyJavaVM is OK):
Thread[Thread-5,5,main], stackTrace:java.net.DualStackPlainSocketImpl#accept0
java.net.DualStackPlainSocketImpl#socketAccept at line:131
java.net.AbstractPlainSocketImpl#accept at line:409
java.net.PlainSocketImpl#accept at line:199
java.net.ServerSocket#implAccept at line:545
java.net.ServerSocket#accept at line:513
bsh.util.Sessiond#run at line:71
java.lang.Thread#run at line:748
Thread[DestroyJavaVM,5,main], stackTrace:
Thread[Thread-3,5,main], stackTrace:java.net.DualStackPlainSocketImpl#accept0
java.net.DualStackPlainSocketImpl#socketAccept at line:131
java.net.AbstractPlainSocketImpl#accept at line:409
java.net.PlainSocketImpl#accept at line:199
java.net.ServerSocket#implAccept at line:545
java.net.ServerSocket#accept at line:513
bsh.util.Httpd#run at line:70
java.lang.Thread#run at line:748
答案 0 :(得分:1)
根据此根堆栈跟踪,您似乎有自定义代码或某些插件无法正确处理退出:
bsh.util.Httpd#run at line:70
请检查此脚本或报告错误。
答案 1 :(得分:0)
异常来自守护程序线程,如here所述:
JMeter将退出它启动的所有非守护程序线程,但有些非守护程序线程可能仍然存在;这些将阻止JVM退出。为了检测这种情况,JMeter在它退出之前就启动了一个新的守护程序线程。这个守护程序线程等了一会儿;如果它从等待返回,那么很明显JVM无法退出,并且线程会打印一条消息来说明原因。
从异常详细信息中可以看出,您有一些套接字连接。这些可能是HTTP Samplers,其他一些打开套接字或自定义脚本的采样器。默认情况下,守护程序线程等待2秒,因此如果任何采样器的超时时间更长,则守护程序可能需要等待更长时间(或者您需要缩短超时时间)。
所以:
检查您的脚本并找出采样器的超时时间。将它们设置为数字< 2秒,或将jmeter.properties中的以下设置更改为高于最大超时值:
jmeter.exit.check.pause=...
例如,如果您的采样器配置为等待30秒,请将此值设置为32秒。
如果没有帮助,可能是底层库中存在一些错误。在这种情况下,你无法真正解决它,但你可以使用一个相当残酷的解决方法:
如果属性jmeterengine.stopfail.system.exit设置为true(默认为false),则JMeter将调用System.exit(1),如果它无法停止所有线程。通常这不是必要的。
因此,如here所述,将以下属性设置为true
:
jmeterengine.stopfail.system.exit=true
正如帮助所说,通常没有必要,但如果线程确实卡住了,那就没有多少选择了。
答案 2 :(得分:0)
我现在遇到相同的问题(我使用的是jmeter 4.0版),解决方案是在jmeter.properties
上禁用beanshell服务器。
只需评论文件beanshell.server.port=9000
中的jmeter.properties
答案 3 :(得分:-1)
您的JMeter很可能过载,即您试图在硬件规格较低的机器上启动太多线程,或者您没有正确调整JMeter以获得高负载或两者兼而有之。
答案 4 :(得分:-1)
我在主节点和从节点上都运行Bean Shell服务器的分布式设置中遇到了此错误,其中每个节点都使用https://jmeter.apache.org/usermanual/best-practices.html#beanshell_server使用相同的jmeter.properties配置:
beanshell.server.port=9000
beanshell.server.file=../extras/startup.bsh
从主节点jmeter.properties中删除这些行后,错误消失了。