JMeter分布式测试无法完成问题求助
JMeter分布式测试1000用户线程无法结束的解决方案
根据你提供的现象和日志,核心问题是Slave节点无法通过RMI连接回主节点(10.0.0.4)传输采样数据,导致线程卡在通知监听器的环节无法结束。以下是针对性的排查和解决步骤:
1. 确保主从节点RMI网络全双向可达
- 验证Slave节点能正常ping通主节点的内网IP(10.0.0.4),同时主节点也能ping通Slave节点。
- 在Azure安全组中开放双向端口:
- 固定的RMI注册端口(默认1099)
- 采样数据回传的端口(建议固定,避免随机端口被拦截)
- 在主节点的
jmeter.bat中添加JVM参数,强制指定RMI对外暴露的IP为10.0.0.4:set JVM_ARGS=-Djava.rmi.server.hostname=10.0.0.4
2. 调整采样数据传输策略
高并发下批量采样发送容易引发连接问题,修改jmeter.properties配置(主从节点同步修改):
- 切换为直接采样发送模式,牺牲少量性能换取稳定性:
remote_sample_sender=DirectSampleSender - 如果坚持使用批量发送,减小单次批量大小:
batch_sample_sender.max_batch_size=50
修改后重启所有JMeter服务。
3. 排查主节点资源瓶颈
主节点需要处理所有Slave的采样数据并生成报告,1000用户级别的数据量可能压垮主节点:
- 临时关闭HTML报告生成,仅保留CSV输出,重新运行测试,确认是否是报告生成导致的阻塞。
- 监控主节点的CPU、内存、磁盘IO使用率,若出现资源耗尽,需升级主节点配置或拆分报告生成流程(测试完成后单独生成报告)。
4. 固定RMI端口避免随机端口拦截
在主从节点的jmeter.properties中配置固定RMI端口,减少防火墙拦截风险:
Slave节点:
server.rmi.localport=50000 server.rmi.port=1099
主节点:
client.rmi.localport=50001
配置完成后在Azure安全组中开放50000、50001、1099端口的双向访问。
5. 统一主从节点的JMeter和JDK版本
- 确保主从节点使用完全相同的JMeter版本(当前为5.6.3)和JDK版本,避免版本不兼容导致的RMI通信异常。
- 建议升级JDK到11或17(JMeter 5.5+官方推荐),修复JDK 8中可能存在的RMI底层bug。
6. 启用DEBUG日志定位细节
在Slave节点的jmeter.properties中开启DEBUG日志:
log_level.jmeter=DEBUG
重启Slave后重新运行测试,查看jmeter.server.txt日志中RMI通信的详细过程,定位具体的连接失败触发点。
内容的提问来源于stack exchange,提问作者Anders Stene
相关产品推荐
相关产品推荐

