EMQX 版本
5.6.1版本
EMQX 安装部署方式
ecs服务器上直接解压运行
EMQX 集群情况
3 个节点组成集群
服务器(运行 EMQX 的机器)硬件配置
4核 8GB AMD
服务器操作系统和平台
Rocky Linux release 9.3 (Blue Onyx)
在 EMQX 中启用的功能
设备连接到mqtt集群,然后平台共享订阅设备发布的消息,进行集群处理。
具体问题
mqtt节点负载规律性的波动,大概80分钟左右。 单cpu,内存,io,网络都无波动。见图
5.6.1版本
ecs服务器上直接解压运行
3 个节点组成集群
4核 8GB AMD
Rocky Linux release 9.3 (Blue Onyx)
设备连接到mqtt集群,然后平台共享订阅设备发布的消息,进行集群处理。
mqtt节点负载规律性的波动,大概80分钟左右。 单cpu,内存,io,网络都无波动。见图
图里是系统平均负载周期性抬高,但你说 CPU、内存、IO、网络都没同步波动,单靠这张图还不能判断是 MQTT 吞吐导致的。
先在一个峰值和一个低谷各抓一次,三台节点都抓:
date
uptime
pidof beam.smp
ps -eo pid,ppid,stat,comm,wchan:32,pcpu,pmem --sort=-pcpu | head -30
pidstat -durwt -p $(pidof beam.smp) 1 20
./bin/emqx ctl vm load
./bin/emqx ctl vm all
./bin/emqx ctl broker stats
./bin/emqx ctl broker metrics | egrep 'client\.|session\.|messages|packets|delivery|dropped|overload'
grep -E 'long_schedule|long_gc|large_heap|busy_(dist_)?port|alarm|overload|mnesia' log/emqx.log* | tail -200
重点看:
STAT=D 或 R 的进程是不是周期性增加。Linux load average 看的是 runnable/D-state 队列,不等同于 CPU 使用率。
EMQX 同时刻有没有 long_schedule、long_gc、busy_dist_port,以及消息、订阅、共享订阅指标是否突增。EMQX 的 sysmon 事件正好用来定位调度、GC、端口阻塞这类问题。
如果这些都平,再查系统侧 80 分钟周期任务:
systemctl list-timers --all
grep -R -E "emqx|logrotate|backup|updatedb" /etc/cron* /var/spool/cron 2>/dev/null
另外补一下峰值时的连接数、订阅数、共享订阅组数量、消息速率/QoS、三台节点各自的图。现在的信息还不足以判断是共享订阅均衡、集群分布端口,还是系统定时任务。
如果以上都没有问题,建议搭建一下 Prometheus 监控: