EMQX 版本
EMQX 5.0.20
EMQX 安装部署方式
ubuntu 22.04 apt 安装
EMQX 集群情况
未使用集群,仅单节点;
服务器(运行 EMQX 的机器)硬件配置
32核 64GB,虚拟机
服务器操作系统和平台
Ubuntu 22.04, amd64
服务端参数优化情况
按照官网介绍优化配置,例如:
sysctl -w net.core.somaxconn=32768
sysctl -w net.ipv4.tcp_max_syn_backlog=16384
sysctl -w net.core.netdev_max_backlog=16384
2 millions system-wide
sysctl -w fs.file-max=2097152
sysctl -w fs.nr_open=2097152
echo 2097152 > /proc/sys/fs/nr_open
压力机硬件配置
例如,8核 16GB,虚拟器,10台
压力机使用的测试工具
emqtt_bench 进行50万订阅链接,1个主题
MQTTX 进行单条消息发送
压力机参数优化情况
系统参数修改情况,例如:
sysctl -w net.ipv4.ip_local_port_range=“1024 65535”
echo 1000000 > /proc/sys/fs/nr_open
ulimit -n 100000
在 EMQX 中启用的功能
基础功能测试,未启动认证等功能
测试场景
10台虚拟机 ,配置8核 16G模拟客户端,建立50万订阅消息,
本地PC ,采用MQTT X工具,建立1个链接,发布1条消息
具体问题
EMQX服务端CPU占用100%,通过EMQX管理界面查看消息流程速率,峰值1000+
咨询下CPU占用过高的原因是什么???
消息流出速度为什么这么低是因为CPU占用高导致的吗??
后台告警信息
消息流出监控
客户端资源消耗不高
MQTTX 模拟消息发布
你的场景是一个publisher 发消息给50万subscribers?
May
4
50万subscribers同时消费,CPU占用是会比较高。你在emqx dashboard看的消息流出峰值是经过10s平均的。
你可以重新测一下(先重启emqx清一下数据),发1条消息然后持续关注CPU占用,看下高占用大概持续多久,然后降下来后从dashboard确认一下发出的消息是不是有50万条。
是吧emqx dashboard看到的消息发出累加起来吗?是发了有50万条的,大概6分钟,这个速率算下来,每秒1400+左右,不算正常吧
第二遍测试,也只发1条消息,CPU高占用大概也在6分钟左右,消息发送完毕后,CPU负载也在10/15/10
swap这个没关(官网也上没这个建议),其他的服务器参数优化都是参考官网优化过的
rocky
10
我们会在自己的环境上试着重现一下问题,后面会在此帖子上更新。
May
11
我在aws上用了1台16C32G的云主机(c5.4xlarge)测试了这个场景,操作系统同样是ubuntu 22.04。EMQX version 5.0.20.
1个发布客户端,50万订阅端,发布端每隔1分钟发一条QoS 0的消息,payload 50字节。没有重现你的问题,我这里看到的是每次1条消息发出去,50万客户端瞬时全部收到该消息。从EMQX dashboard观察到的峰值有近7万,CPU一直用的不多,我截了一张top监控到的峰值,同时也附上持续的CPU监控截图。
May
12
补充:EMQX使用的是默认配置,没有做任何调优,操作系统按官网优化。
5.0 默认连接速率是 1000/s,超过这个速率后续连接会被推迟或者被拒绝,我怀疑是这个原因
hubert
14
连接速率应该不是问题,测试场景是在都连接上的情况下发,发布消息的场景。也测试过增加连接速率的场景,这个不影响消息发布
May
17
我使用的是XMeter,有另一个同事之前用emqtt_bench跑过,CPU也没有这么高。你把swap关掉试试呢。