首页 > 解决方案 > 在分发模式下持续时间结束后 JMeter 测试未停止

问题描述

我正在使用基本线程组和 HTTP 采样器运行一个非常简单的 JMeter 测试。为执行设置的持续时间为 10 分钟(600 秒)。在此处输入图像描述

测试在我的本地以 JMeter GUI 和 CLI 模式成功运行并自行停止(10 分钟后)。

但是,当我在分布式模式下运行相同的测试时,测试不会自行停止并被挂起。我一直在观察这个问题,主要是线程数 200 及以上。

在此处输入图像描述

我已经覆盖了一些 JMeter 属性:

"server.rmi.ssl.disable": "true",
"jmeterengine.nongui.maxport": JMETER_EXEC_PORT,
"jmeterengine.nongui.port": JMETER_EXEC_PORT,
"client.tries": str(3),
"client.retries_delay": str(5000),
"client.rmi.localport": CLIENT_RMI_LOCALPORT,
"server.rmi.localport": SERVER_RMI_LOCALPORT,
"server_port": SERVER_PORT,
"server.exitaftertest": "true",
"jmeterengine.stopfail.system.exit": "true",
"jmeterengine.remote.system.exit": "true",
"jmeterengine.force.system.exit": "true",
"jmeter.save.saveservice.output_format": "csv",
"jmeter.save.saveservice.autoflush": "true",
"beanshell.server.file":  "./extras/startup.bsh",
"jmeter.save.saveservice.connect_time": "true",
"jpgc.repo.sendstats": "false",

这是我分别用于 JMeter 客户端和服务器的 JMeter CLI 命令:

// JMeter Client
jmeter.sh -n -f -t {testPlan} -j jmeter.log -l report.csv -LINFO -Lorg.apache.http=DEBUG -Lorg.apache.http.wire=ERROR -Ljmeter.engine=DEBUG -X -R {serverIPs}

// JMeter Server
jmeter.sh -s -Jbeanshell.server.port={beanshellServerPort}
  1. 任何帮助指针以确保测试在指定的持续时间后结束?
  2. 这可以通过任何 JMeter 设置/属性来控制/强制执行吗?
  3. 是否与基本线程组 v/s 线程组插件(如并发/终极线程组)有关?

示例测试运行:

我尝试让 10 名工人运行这个测试计划,其中 6 人成功完成,其中 4 人被绞死。请在此处找到日志和测试计划

另外,为什么 Summariser 显示 Active + Finished 线程多于 Started?

在此处输入图像描述

标签: jmeterjmeter-pluginsjmeter-5.0

解决方案


查看日志,似乎 JMeter 在报告测试完成后没有完成所有线程:

2020-12-16 08:19:48,933 INFO o.a.j.t.JMeterThread: Thread finished: 10.244.11.4-Thread Group 1-86
2020-12-16 08:25:22,926 INFO o.a.j.e.RemoteJMeterEngineImpl: Shutting test ...
2020-12-16 08:25:22,927 INFO o.a.j.e.RemoteJMeterEngineImpl: ... stopped
2020-12-16 08:25:22,928 INFO o.a.j.t.JMeterThread: Stopping: 10.244.11.4-Thread Group 1-78 
2020-12-16 08:25:22,928 INFO o.a.j.t.JMeterThread: Stopping: 10.244.11.4-Thread Group 1-190

您需要将失败的从站的日志文件与正在通过的从站的日志文件进行比较,这将允许您检测任何不一致之处。

我能想到的可能原因之一是您分配的JVM 堆空间太少,至少一个控制器正在使用默认的 1 GB 堆,这可能不足以为 200 多个虚拟用户执行测试。考虑将其提高到更高的值。有关此以及其他 JMeter 性能和调优技巧的更多详细信息,请参阅JMeter 负载测试“内存不足”故障的 9 个简单解决方案文章

如果问题仍然存在,找出线程卡住原因的唯一方法是进行线程转储


推荐阅读