emqx 产生消息积压以后,压测端停止发消息,broker继续推送消息速度很慢,有什么参数可以调整吗?

问题描述

压测端8w连接其中2w模拟客户端以每秒2w速度(总共)进行发送qos1 消息,大小为500字符,单向ssl认证,总共600w消息,两个broker组成的小集群,服务端以共享订阅方式处理。5分钟压测端完成600w 消息发送时,实际服务端消费了220w左右消息,剩下的花了10分钟才全部消费完毕,数量是准确的。
5分钟之内观测一台broker,流入速度差不多在50MBit/s,流出大约40MBit/s。5分钟之后由于压测端600w消息已经发送完毕,broker 发送剩余的380w消息流出速度却突然降到了3~8MBit/s。难道不应该全速发送么?

等10分钟后数量对上了,整个耗时15分钟(5分钟+10分钟)~~~

我以为服务端消费速度慢,又重新压了一遍情况又差不多。服务端消费速度没问题。

说服务端消费速度赶不上生产速度可以理解,我们已经调大了emqx相关内存和队列大小,期望的是当消息生产已经停止情况下,emqx应该尽快把内存中暂存消息推送到服务端,实际情况却不是这样的。

有什么参数可以调整吗?

环境信息

  • EMQ X 版本:4.2.9
  • 操作系统及版本:ubuntu20.04
  • 其他

目前消息都是积压在内存中的,所以会对垃圾内收、进程调度的性能产生影响,并不是零成本地积压。

和你说的有一定关系。但是我意思比如消费能力是2000/s,消息生产速度是4000/s,假设emqx 内存可以暂存所有消息,当消费生产停止后,emqx给消费者推送速度应该也是2000/s。但目前看来,好像掉到200/s或者100/s 。上面只是形象说明,能了解我意思么?

消息积压导致 EMQ X 需要额外的 CPU 时间处理相关的业务,自然会影响推送速度。