EMQ 报错:connection_crashed

环境信息

  • EMQX 版本:4.4.1
  • 操作系统及版本:centos7.5
  • EMQ实例: 4C8G * 2

问题描述

场景如下:

  • Topic: 5W
  • 共享订阅数: 10W
  • Pub:5
  • Sub: 2
  • MQTT 连接:1W
  • 初始方并发数:100
  • 每 5 分钟提高并发数:50

当开始尝试测试时出现发送数据失败,消费端连接断开
压测开始时 CPU 使用率飙升到 80% , load average: 4.2
emq dashboard 告警: System memory usage is higher than 70.0%
CPU 信息如下

EMQ 2台 4C8G 服务器配置的情况,该测试场景失败。是服务器资源不够,还是我配置的原因?配置参考了 https://www.emqx.io/docs/zh/v4.4/tutorial/tune.html#linux-操作系统参数

配置文件及日志

错误日志:


看起来是因为消费端消费能力不够,最终压力传导到 EMQX 内,导致会话崩溃

请问如何确认是消费端消费能力不够,消费能力是否和共享订阅数有关?
目前我们一共由 5W topic ,2个消费端,如果再增加消费端数量则会达到 15W 的共享订阅数

从这里看不出来你们的消息 Topic 是怎么设计的,麻烦你提供下详细的信息

  1. Pub 这方的 Topic 格式,每个包的大小
  2. Sub 这边的共享订阅模式
  3. Qos 的值是多少
  1. Pub 这方的 Topic 格式,每个包的大小
    格式:{random_str:32}/{random_str:20}
    例:4d5d6552e7ff456f86a1986645c6bcf6/1S0O47smge5bUtcyu3PC

平均数据包大小:1,357 byte 左右

  1. Sub 这边的共享订阅模式
    是指 $share 还是 $queue 吗?
    如果是,我们现在是通过 $share

  2. Qos 的值是多少
    Qos = 1

  1. 第一个问题就是默认的包大小限制是 1M,我看你们的日志里面也有包过大的提示,这点可以改下
  2. Pub 这边的 TPS 是多少
  3. $share 模式, 10W的共享订阅数,是指有 Sub 端 10 万个连接数,还是有 10 W的 $share group,
  4. 和上一点有管,每个共享订阅组下面有多少个 Client (或者说连接), 每个共享组每秒流入的数据量是多少
  1. 第一个问题就是默认的包大小限制是 1M,我看你们的日志里面也有包过大的提示,这点可以改下
    请问您说的包大小限制,是指 retainer.max_payload_size 吗

  2. Pub 这边的 TPS 是多少
    在报错前 TPS 是 100,报错后我们停止了发送数据

  3. $share 模式, 10W的共享订阅数,是指有 Sub 端 10 万个连接数,还是有 10 W的 $share group,
    订阅数为 topic 数量 * Sub 数量,即 5W * 2 = 10W,Sub 端连接数为 2 个(Sub 实例数),1个 $share group

可参考下图

  1. 和上一点有管,每个共享订阅组下面有多少个 Client (或者说连接), 每个共享组每秒流入的数据量是多少
    Client 数量 Sub 2个。每个共享组每秒流入的数据量大约为 130 KB(单台实例为 70 KB)