You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JMeter分布式测试Jenkins触发结果异常,手动执行正常求助

Jenkins流水线执行JMeter分布式测试出现无效结果的解决方法

问题现象

通过Jenkins流水线启动1主1从的JMeter分布式测试,已确认远程节点成功启动jmeter-server并创建远程对象:

Using local port: 4000
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[XX.XX.XX.XX:4000](local),objID:[652e71b0:185345dcb07:-7fff, -3276995377179896203]]]
Starting the test on host XX.XX.XX.XX @ Wed Dec 21 11:08:27 GMT 2022 (1671620907500)

但主节点的测试摘要出现无效值,无样本执行:

Creating summariser <summary>
Created the tree successfully using /tmp/resources/complete-test-plan-rework_Disrupt-SearchAPI.jmx
Configuring remote engine: XX.XX.XX.XX
Using local port: 4000
Configuring remote engine: XX.XX.XX.XX
Starting distributed test with remote engines: [XX.XX.XX.XX, XX.XX.XX.XX] @ Wed Dec 21 11:08:25 GMT 2022 (1671620905561)
Remote engines have been started:[XX.XX.XX.XX, XX.XX.XX.XX]
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
summary =      0 in 00:00:00 = ******/s Avg:     0 Min: 9223372036854775807 Max: -9223372036854775808 Err:     0 (0.00%)
Tidying up remote @ Wed Dec 21 11:28:20 GMT 2022 (1671622100532)

手动启动jmeter-server时测试运行正常,仅Jenkins流水线触发时出现该问题。

排查与解决步骤

1. 确保jmeter-server在Jenkins会话结束后持续运行

当前通过ssh直接启动jmeter-server,Jenkins流水线步骤完成后ssh会话会关闭,导致jmeter-server进程被终止。需用nohup让进程后台持久运行,并记录日志方便排查:
修改启动jmeter-server的命令为:

fqdn=${HOST}

ssh -o StrictHostKeyChecking=no -o ServerAliveInterval=60 fesjenk@$fqdn 'nohup sh /opt/apache-jmeter-5.2.1/bin/jmeter-server.sh > /tmp/jmeter-server.log 2>&1 &'
sleep 30
echo trigger SUCCESSFUL

之后可查看/tmp/jmeter-server.log获取远程节点的详细运行日志,定位具体错误。

2. 统一Java环境变量

Jenkins执行环境的JAVA_HOME可能与手动启动时不一致,导致jmeter-server无法正常工作。在启动命令中显式指定Java路径:

ssh -o StrictHostKeyChecking=no -o ServerAliveInterval=60 fesjenk@$fqdn 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64 && nohup sh /opt/apache-jmeter-5.2.1/bin/jmeter-server.sh > /tmp/jmeter-server.log 2>&1 &'

替换为实际的Java安装路径,确保远程节点使用正确的Java环境。

3. 验证JMeter版本一致性

主节点(执行jmeter.sh的节点)与远程节点的JMeter版本必须完全一致,否则会存在通信兼容性问题。分别在主节点和远程节点执行版本检查:

# 主节点
sh /opt/apache-jmeter-5.2.1/bin/jmeter.sh -v

# 远程节点
ssh fesjenk@$fqdn 'sh /opt/apache-jmeter-5.2.1/bin/jmeter-server.sh -v'

确保版本号完全相同,若不一致则统一升级或降级到同一版本。

4. 同步测试依赖文件

通过-G传递的文件(如users.csv、screenshot.PNG)需确保在远程节点的对应路径存在且有读取权限。在Jenkins流水线中添加文件同步步骤:

# 同步测试计划
scp -o StrictHostKeyChecking=no /tmp/resources/complete-test-plan-rework_Disrupt-SearchAPI.jmx fesjenk@$fqdn:/tmp/resources/
# 同步数据文件
scp -o StrictHostKeyChecking=no /tmp/datafiles/* fesjenk@$fqdn:/tmp/datafiles/
# 同步配置文件
scp -o StrictHostKeyChecking=no /tmp/target-file.properties fesjenk@$fqdn:/tmp/

5. 检查端口与防火墙规则

JMeter分布式测试需要开放RMI注册端口(默认1099)和数据传输端口(如4000),确保主节点与远程节点之间能双向访问这些端口:

  • 在远程节点启动jmeter-server时指定固定端口:
    ssh -o StrictHostKeyChecking=no -o ServerAliveInterval=60 fesjenk@$fqdn 'export JAVA_HOME=/path/to/java && nohup sh /opt/apache-jmeter-5.2.1/bin/jmeter-server.sh -Djava.rmi.server.hostname=XX.XX.XX.XX -Dserver_port=1099 -Dserver.rmi.localport=4000 > /tmp/jmeter-server.log 2>&1 &'
    
  • 检查远程节点防火墙规则,开放1099、4000端口,或临时关闭防火墙测试是否正常。

6. 验证Jenkins用户权限

确保Jenkins使用的fesjenk用户对JMeter安装目录、临时文件目录(/tmp)有读写权限:

ssh fesjenk@$fqdn 'ls -ld /opt/apache-jmeter-5.2.1 /tmp'

若权限不足,调整目录权限或更换有足够权限的用户执行测试。


内容的提问来源于stack exchange,提问作者TESTER07

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 21:55:15