emqx主动断开客户端链接

版本:emqx5.7.2
k3s部署

session {
max_subscriptions = infinity
upgrade_qos = false
max_inflight = 32
retry_interval = 30s
max_awaiting_rel = 100
await_rel_timeout = 300s
session_expiry_interval = 2h
max_mqueue_len = 50000
mqueue_priorities = disabled
mqueue_default_priority = lowest
mqueue_store_qos0 = true

force_shutdown {
  max_message_queue_len = 100000
  max_heap_size = 4096MB
}

force_gc {
  count  =  16000
  bytes  =  16MB
}

}
max_heap_size我已经设置为4096了,emqx还是报错
2025-04-16T08:45:12.457475418+08:00 2025-04-16T00:45:12.456592+00:00 [error] P
rocess: <0.4038.0> on node ‘emqx@10.242.0.47’, Context: maximum heap size reached, Max Heap Size: 6291456, Total Heap Size: 7545216, Kill: true, Error Logger: true, Message Queue Len: 0, GC Info: [{old_heap_block_size,2984878},{heap_block_size,4560232},{mbuf_size,473},{recent_size,1425285},{stack_size,97},{old_heap_size,0},{heap_size,2072466},{bin_vheap_size,1122795},{bin_vheap_block_size,1897789},{bin_old_vheap_size,0},{bin_old_vheap_block_size,46422}]
我的场景是这样的
emqx主题订阅,一个服务的客户端,订阅了5000个远端设备的20个主题,就是这个服务的客户端订阅了100000个主题,当订阅的主题达到了差不多5w的时候,emqx就会把这个服务的客户端主动断开,同时也报了上面的错误

不能这么玩,应该说禁止这么用

  1. 用 MQTT 的通配符来订阅。比如:服务端订阅 /online/+ ,然后所有的客户端都发布/online/{self_clientid}
  2. 即使你用了通配符减少了订阅主题的数量,也建议每个订阅客户端的消息接收速率不超过 1500 消息/秒,超过了就用共享订阅。

EMQX 的客户端消息接收速率有限制吗?

EMQX 或 MQTT 协议并没有直接对每个客户端的消息接收速率进行严格限制。但当接收的消息过多,客户端无法及时处理时,可能会导致消息堆积过多并最终丢失。为了确保系统稳定性和消息传输的可靠性,建议每个订阅客户端的消息接收速率不超过 1500 消息/秒(按每条消息 1KB 计算)。

如果消息接收速率超过此建议,可以使用共享订阅来添加多个订阅客户端,从而分散负载,降低单个订阅客户端的消息接收速率。