分布式负载测试场景下无法生成JMeter HTML报告问题求助
完整报错信息如下:
Configuring remote engine: x.x.x.x Starting distributed test with remote engines: [x.x.x.x] @ Wed Aug 18 14:24:47 UTC 2021 (1629296687532) Warning: Nashorn engine is planned to be removed from a future JDK release Error in rconfigure() method java.rmi.MarshalException: error marshalling arguments; nested exception is: java.net.SocketException: Broken pipe (Write failed) Remote engines have been started:[] The following remote engines have not started:[x.x.x.x] Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
错误本质
本次报错核心是主节点与从节点的RMI通信链路异常,主节点无法将序列化后的测试任务发送给从节点,Broken pipe 表示数据写入时通信链路已被断开。其中Nashorn引擎的警告为JDK版本提示,和本次报错无关,无需处理。
定位步骤
- 验证从节点服务状态与基础连通性
登录从节点确认jmeter-server服务已正常启动,在主节点执行nc -zv 从节点IP 1099验证RMI默认端口是否可通,同时检查主从节点的防火墙、安全组是否放通JMeter所需的全部端口(默认1099,以及后续数据通信的端口范围)。 - 验证版本一致性
分别在主从节点执行jmeter -v和java -version,确认两者的JMeter版本、JDK大版本完全一致,版本不匹配是RMI序列化报错的最常见诱因。 - 验证配置文件一致性
对比主从节点jmeter/bin/jmeter.properties文件,确认以下配置项保持一致:- 未配置SSL证书的场景下,主从节点的
server.rmi.ssl.disable都需要设置为true server.rmi.port统一设置为固定端口,避免随机端口被安全策略拦截
云环境部署需额外确认从节点启动jmeter-server时已添加启动参数-Djava.rmi.server.hostname=从节点对外访问IP,避免从节点默认绑定内网IP导致主节点无法访问。
- 未配置SSL证书的场景下,主从节点的
- 验证测试脚本依赖一致性
确认测试脚本用到的第三方插件Jar包、CSV测试数据文件、配置文件等资源,在从节点的对应路径下都存在,路径必须和主节点完全一致。
修复后验证
完成以上配置调整后,先在从节点重启jmeter-server服务,再重新执行测试命令即可:sh jmeter -n -t test.jmx -l testresult.jtl -R x.x.x.x -e -o /home/ubuntu/reports
内容的提问来源于stack exchange,提问作者blahblahland
相关产品推荐
相关产品推荐

