我在做压测发现前半段时间接收消息比较慢

EMQX 版本

EMQX 5.8

EMQX 安装部署方式

通过k8s部署

EMQX 集群情况

单节点

服务器(运行 EMQX 的机器)硬件配置

具体型号未知,但是k8s限制了8核

服务器操作系统和平台

centos7.x

服务端参数优化情况

所有的限制都改成了无限制,除了队列长度是10w,飞行窗口是1000

压力机使用的测试工具

自己写了一个java代码压测,一次性发送10w条消息

压力机参数优化情况

在 EMQX 中启用的功能

测试场景

用一个java客户端预备100个线程作为连接池,用连接池内的链接给emqx发送消息,再用java程序单节点去订阅消息,收到消息后,会在用这个客户端回复一条消息。发送和订阅的客户端使用的是异步客户端。

我发现一个现象,假设整个压测的时间是2分钟,那么前面的几十秒,收消息比较慢,从数据上看,出了了一批消息后延迟了几秒才收到下一批消息。但是后半部分的处理就没有这个问题,消息是源源不断得收到,当我结束一轮压测之后,再次开启下一轮(没有重启任何服务),还是会出现这个问题,不是线程预热问题也不是数据库预热问题,已经排查了。


可以看到36秒的时候发出了消息,40秒才收到。接收和发送用的是同一个客户端,我尝试使用你们提供的公共mqtt,broker.emqx.io 也一样有这个问题。

发送端和接收端的qos 设置为0 和 2 都有这个问题。

建议你用 MQTTX 测试一下,我还没遇到过这种,给不出建议。可以先从你的客户端代码开始 debug 查起

我用EMQX5.10就没有这个问题。

那就真奇怪了,broker.emqx.io 就是 5.10 的