EMQ压测告警问题

EMQX 版本

EMQX 5.0.16

EMQX 安装部署方式

或通过包安装部署

EMQX 集群情况

使用 3 个节点组成集群

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

24核 64GB,CPU 型号:Intel Xeon Cascade Lake 8255C(2.5GHz/3.1GHz)

服务器操作系统和平台

centos7.6, amd64

服务端参数优化情况

压力机硬件配置

8核 16GB

压力机使用的测试工具

emqtt

压力机参数优化情况

在 EMQX 中启用的功能

jwt认证

测试场景

发布消息:
./emqtt_bench pub -t t -u gtja -P eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJjbGllbnRJZCI6Imd0amFUZXN0MiIsImV4cCI6MTY4Mjk2NjM4MSwiaWF0IjoxNjc5MzY2MzgxfQ.vHAY5IzKvbEGBpOcG4a-mQWJbHg9hYkInoGqr_eDRm2CDwz6NMmr82zpCN6rnw4YsUJsZsxx7I9OKLgzm-LzEA -h 10.180.238.23 -c 15 -I 200

订阅消息
./emqtt_bench sub -t t -u gtja -P eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJjbGllbnRJZCI6Imd0amFUZXN0MiIsImV4cCI6MTY4Mjk2NjM4MSwiaWF0IjoxNjc5MzY2MzgxfQ.vHAY5IzKvbEGBpOcG4a-mQWJbHg9hYkInoGqr_eDRm2CDwz6NMmr82zpCN6rnw4YsUJsZsxx7I9OKLgzm-LzEA -h 10.180.238.27 -c 20000 -i 1 -k 300

具体问题

dashboard页面出现告警,集群中每个节点都有

conn_congestion,连接拥塞
可以看一下网络 IO 的情况。另外 emqtt_bench 的机器压力大么

这个连接拥挤是指什么?不是端口不够用吧;压力机上除了emqtt_bench没有跑任何东西;出现这个告警时emq节点的cpu使用率超过85%了

不是端口不够用,端口不够用的情况下,bench 无法启动新的 mqtt 连接。
这是 MQTT 连接中报文过多导致的 tcp socket 拥塞。
配置-连接拥塞 这里有相关说明。

可不可以理解已经到了集群吞吐的瓶颈了?

是的,可以这样理解。
按照你的 bench 命令,
15 个 pub client,间隔 200ms 进行 pub,20000 个 sub client,按照默认 payload size 256Byte 计算
这个运行 sub bench 机器,需要有至少
15*(1000/200)*256Byte * 20000 ~= 384MiB/s ~= 3Gbps 的网络 IO

我试了下将发送的payload size成了4Byte,还是按照上面的命令操作,按理说现在的网络io降了很多了,但是还是出现了连接阻塞的告警

订阅消费能力不够,或者通往订阅那边的网络带宽受限。
消息先是堆积到了 TCP 协议栈的 Buffer 里,Buffer 满了之后就有这个告警,最终消息可能会积压到客户端对应的 emqx 进程里,超过限制之后 emqx 会将其杀死。

把这个配置放大一些:listener.tcp.external.sndbuf = 1MB。但如果是消费能力的问题,放大这个参数只是推迟了问题。

好的,我改下参数试下,往topic每秒发送50条数据时候没问题,同样的订阅是没有问题的;还有个问题报连接拥塞时候节点的cpu使用也会告警,一般都在80以上了,如何确定是不是网络带宽问题呢?我这边网卡是万兆的