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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:32:25