emqx发现设备告警,求助是什么意思,怎么调优解决

环境

  • EMQX 版本:emqx-5.0.25-el7-amd64.tar.gz
  • 操作系统版本:CentOS

重现此问题的步骤

  1. 发生告警

以下是告警内容:
buffer: 4096

clientid: 2400200125160032

conn_state: connected

connected_at: 1756443392015

high_msgq_watermark: 8192

high_watermark: 1048576

memory: 198376

message_queue_len: 12

peername: 111.55.9.33:26252

pid: <0.32053.12>

proto_name: MQTT

proto_ver: 4

recbuf: 369280

recv_cnt: 7

recv_oct: 1941

reductions: 258774

send_cnt: 55

send_oct: 2483

send_pend: 4

sndbuf: 46080

sockname: 172.22.245.178:1883

socktype: tcp

username: 2400200125160032

最终肯能导致了设备大量离线

这个告警是结果,不是原因。
因为设备在不停的重连,导致的这个告警。

设备掉线的原因,可能(以前客户遇到一般的情况就是)是一上线,存的消息太多了,一次性发给设备,结果 tcp buffer 满了,背压后就直接导致掉线。

这就形成了一个恶性循环:设备一上线,太多消息导致掉线,再次上线,以前累积的消息再次冲过来,又掉线。

这个需要自己通过设计去避免这个问题:
上线时不要放太多的消息,

PS:如果是保留消息多的话,在 5.8.7 以上引入了限流的配置,这样可以让保留消息发得不会太快。