You need to enable JavaScript to run this app.
导航
eMQTT-Bench 测试 EMQx
最近更新时间:2025.03.06 10:16:55首次发布时间:2025.03.06 10:16:55

概述

eMQTT-Bench 是一款开源的 MQTT Benchmark性能测试工具,云原生消息引擎 MQTT 版可以兼容 eMQTT-Bench 工具。借助本文,可以实现通过 eMQTT-Bench 工具完成对 云原生消息引擎 MQTT 版的性能压测。

压测准备

  • ECS 16c 32g,推荐型号 ecs.c3i.4xlarge
  • MQTT 实例

注意事项

  • 请确保 ECS 和 MQTT 服务器 部署在相同VPC内
  • 因 eMQTT-Bench 对新操作系统兼容性未完全适配,ECS 操作系统请选择 CentOS 7.9
  • ECS 单张网卡最大推荐 50000 TCP连接,如测试连接数大于 50000,请在一台ECS上挂载多张网卡
    • 如 20万连接数测试,请挂载4张网卡(一张主网卡,三张辅助网卡),使每张网卡发起 50000 mqtt 连接
  • 如果测试连接数大于 20万,请使用多台 ECS 组合完成测试
    • 如 100万连接数测试,请使用5台ECS发起测试

网卡调优

  • 请使用如下命令完成 ECS 初始化配置(如未配置,单张网卡最大 2.8万 mqtt连接)
sysctl -w net.ipv4.ip_local_port_range="500 65535"
echo 1000000 > /proc/sys/fs/nr_open
ulimit -n 100000
  • 配置辅助网卡路由(如未配置,则只能通过主网卡发送流量)
wget http://mirrors.ivolces.com/extra-tools/centos/7/rpms/multi-nic-hotlog-for-centos7-v1.0.1-1.ve1.x86_64.rpm
yum install ./multi-nic-hotlog-for-centos7-v1.0.1-1.ve1.x86_64.rpm

配置 mqtt client 认证用户与鉴权

部署 eMQTT-bench

  • 从 github emqtt-bench release 查看最新版本
  • 如使用 CentOS 7.9 则必须选择 el7-amd64 发行包,复制地址,并在ECS中使用wget下载
    • 如网络卡顿,可以本地下载该文件再上传到 tos,设置文件的读写权限为公共读。ECS 可以通过该文件的tos地址完成下载
  • 解压缩包,并切换到 bin 目录
  • 测试命令,并执行 ./emqtt_bench 命令测试是否成功安装
  • 可以参考 EMQ eMQTT-Bench 教程,需要注意其文档部分 shell 命令无法直接执行
# 新建 eMQTT-Bench 目录
mkdir emqtt-bench && cd emqtt-bench

# 从 github 下载 eMQTT-Bench,必须选择 el7-amd64 版本
wget https://github.com/emqx/emqtt-bench/releases/download/0.4.34/emqtt-bench-0.4.34-el7-amd64.tar.gz
  
# 解压
tar zxf emqtt-bench-0.4.34-el7-amd64.tar.gz 

# 切换到 ./bin 目录
cd bin

# 运行10个连接数测试命令
./emqtt_bench conn -h ${mqtt-xxxxxxxxxxxx.mqtt.ivolces.com} -p 1883 --username user --password 123456 -c 10 -i 10

压测命令

  • 请在多个 ECS console 中分别执行每行命令
  • 假设 192.168.2.1 为主网卡,192.168.2.11/12/13 为辅助网卡
  • 参数说明
    • conn:构建连接命令
    • -h:mqtt 服务器的 vpc tcp 接入点地址,请根据实际需要替换
    • -p:端口信息,默认为1883
    • -c: 该网卡构建的mqtt连接数量,当前为 50000
    • -i:连接的发送间隔,当前为1毫秒,可以适当增大该值
    • --username:MQTT client 认证的用户名
    • --password:MQTT client 认证的密码
    • --ifaddr:指定该流量发起者的网卡ip
    • 其他参数参考 eMQTT-Bench教程
# 指定通过主网卡发送流量
./emqtt_bench conn -h ${mqtt-xxxxxxxxxxxx.mqtt.ivolces.com} -p 1883 -c 50000 -i 1 --username user --password 123456 --ifaddr 192.168.2.1

# 从第一张辅助网卡发送流量,下同(如果失败,则未配置辅助网卡路由)
./emqtt_bench conn -h ${mqtt-xxxxxxxxxxxx.mqtt.ivolces.com} -p 1883 -c 50000 -i 1 --username user --password 123456 --ifaddr 192.168.2.11

./emqtt_bench conn -h ${mqtt-xxxxxxxxxxxx.mqtt.ivolces.com} -p 1883 -c 50000 -i 1 --username user --password 123456 --ifaddr 192.168.2.12

./emqtt_bench conn -h ${mqtt-xxxxxxxxxxxx.mqtt.ivolces.com} -p 1883 -c 50000 -i 1 --username user --password 123456 --ifaddr 192.168.2.13