在分发模式下持续时间结束后,JMeter 测试不会停止

JMeter test not stopping after duration ends in distribution mode

我正在 运行使用基本线程组和 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 都可以 controlled/enforced setting/property?
  3. 是不是和Basic线程组有关v/s 线程组插件,例如 Concurrency/Ultimate 线程组?

示例测试运行:

我尝试 运行 这个测试计划有 10 个工人,其中 6 个成功完成,而其中 4 个挂起。请找到 logs and test plan here.

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

查看日志,似乎 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 Heap space, at least one controller is using default 1 GB of heap which might be not sufficient for executing your test for 200+ virtual users. Consider ramping-up this to a higher value. See 9 Easy Solutions for a JMeter Load Test “Out of Memory” Failure 文章太少,无法详细了解此内容和其他 JMeter 性能和调优技巧

如果问题仍然存在,找出线程卡住原因的唯一方法是 thread dump