JMeter MQTT负载测试出现HiveMQTTConnection发布失败问题
故障原因分析
该故障同时涉及JMeter测试计划配置缺陷和运行机器资源瓶颈两类问题,具体原因拆解如下:
1. JMeter测试计划配置问题
- 缺少MQTT连接自动重连机制:当前配置仅让每个用户在初始化时执行1次MQTT连接,后续1小时的循环发布周期内,若连接因服务端会话超时(多数MQTT broker默认会话超时为30分钟,和你故障出现的20分钟时间点吻合)、网络波动被断开,插件不会自动重建连接,直接触发
MQTT client is not connected报错。 - 无连接失败重试逻辑:30分钟内启动8000线程的梯度下,后期并发连接请求量上升后,部分请求排队超时未成功建立连接,后续发布动作自然无法执行。
2. 运行机器资源配置问题
- 操作系统文件句柄限制:EC2 Linux实例默认单进程最大打开文件句柄数仅为1024或4096,每个MQTT长连接都会占用1个TCP socket(对应1个文件句柄),当连接数超过系统配额后,新连接无法建立,已有连接也可能被内核主动回收。
- 实例网络资源瓶颈:x3.large实例的网络带宽、每秒收发包数(PPS)、并发连接数均有固定配额,8000个长连接+每秒1600条左右的发布消息(8000个用户每5秒发1条)很容易触碰配额上限,导致TCP丢包、连接被重置。
验证排查方法
你可以先做两个简单验证确认具体诱因:
- 执行
ulimit -n查看当前实例的文件句柄限制,同时查看系统日志dmesg是否存在Too many open files相关报错,即可确认是否为资源配额问题。 - 在JMeter的MQTT连接配置中开启自动重连、添加连接失败重试控制器,先调低并发数跑测验证无报错后再逐步提升并发,即可确认是否为配置问题。
内容的提问来源于stack exchange,提问作者karlos
相关产品推荐
相关产品推荐

