emqx/emqtt-benchemqtt-bench 是一个用 Erlang 编写的轻量级 MQTT v5.0 基准测试工具,用于评估 MQTT 服务器的性能。该工具支持模拟大量并发 MQTT 客户端,进行连接、订阅、发布等操作的性能测试,帮助用户评估 MQTT 服务器在不同场景下的处理能力,如最大并发连接数、消息吞吐量、延迟等关键指标。
注意:以下示例中,"Usage" 指的是镜像内的脚本
emqtt_bench,而 Docker 镜像名称为emqx/emqtt-bench。
%u、%c、%i),可生成动态主题用于测试 MQTT 服务器处理并发连接的能力。
shdocker run -it emqx/emqtt-bench conn --help
选项说明:
| 选项 | 描述 | 默认值 |
|---|---|---|
| --help | 显示帮助信息 | - |
| -h, --host | MQTT 服务器主机名或 IP 地址 | localhost |
| -p, --port | MQTT 服务器端口 | 1883 |
| -c, --count | 最大客户端数量 | 200 |
| -n, --startnumber | 起始编号 | 0 |
| -i, --interval | 连接间隔(毫秒) | 10 |
| -u, --username | 连接用户名(可选) | - |
| -P, --password | 连接密码(可选) | - |
| -k, --keepalive | 保活时间(秒) | 300 |
| -C, --clean | 清除会话 | true |
| -S, --ssl | 使用 SSL 连接 | false |
| --certfile | 客户端证书文件路径(如需双向认证) | - |
| --keyfile | 客户端私钥文件路径(如需双向认证) | - |
| --ifaddr | 本地 IP 地址或接口地址 | - |
以 100 个/秒的速率创建 50,000 个并发连接:
shdocker run -it emqx/emqtt-bench conn -c 50000 -i 10
用于测试 MQTT 服务器处理订阅操作的能力。
shdocker run -it emqx/emqtt-bench sub --help
选项说明:
| 选项 | 描述 | 默认值 |
|---|---|---|
| --help | 显示帮助信息 | - |
| -h, --host | MQTT 服务器主机名或 IP 地址 | localhost |
| -p, --port | MQTT 服务器端口 | 1883 |
| -V, --version | MQTT 协议版本(3/4/5) | 5 |
| -c, --count | 最大客户端数量 | 200 |
| -n, --startnumber | 起始编号 | 0 |
| -i, --interval | 连接间隔(毫秒) | 10 |
| -t, --topic | 订阅主题(支持 %u、%c、%i 变量) | - |
| -q, --qos | 订阅 QoS 级别(0/1/2) | 0 |
| -u, --username | 连接用户名(可选) | - |
| -P, --password | 连接密码(可选) | - |
| -k, --keepalive | 保活时间(秒) | 300 |
| -C, --clean | 清除会话 | true |
| -S, --ssl | 使用 SSL 连接 | false |
| --certfile | 客户端证书文件路径(如需双向认证) | - |
| --keyfile | 客户端私钥文件路径(如需双向认证) | - |
| --ws | 使用 WebSocket 传输 | false |
| --ifaddr | 本地 IP 地址或接口地址 | - |
以 100 个/秒的速率创建 50,000 个并发订阅客户端,订阅主题 bench/%i(%i 为客户端编号),QoS 级别 2:
shdocker run -it emqx/emqtt-bench sub -c 50000 -i 10 -t bench/%i -q 2
用于测试 MQTT 服务器处理消息发布的吞吐量和延迟。
shdocker run -it emqx/emqtt-bench pub --help
选项说明:
| 选项 | 描述 | 默认值 |
|---|---|---|
| --help | 显示帮助信息 | - |
| -h, --host | MQTT 服务器主机名或 IP 地址 | localhost |
| -p, --port | MQTT 服务器端口 | 1883 |
| -V, --version | MQTT 协议版本(3/4/5) | 5 |
| -c, --count | 最大客户端数量 | 200 |
| -n, --startnumber | 起始编号 | 0 |
| -i, --interval | 连接间隔(毫秒) | 10 |
| -I, --interval_of_msg | 消息发送间隔(毫秒) | 1000 |
| -u, --username | 连接用户名(可选) | - |
| -P, --password | 连接密码(可选) | - |
| -t, --topic | 发布主题(支持 %u、%c、%i 变量) | - |
| -s, --size | 消息 payload 大小(字节) | 256 |
| -q, --qos | 发布 QoS 级别(0/1/2) | 0 |
| -r, --retain | 保留消息标志 | false |
| -k, --keepalive | 保活时间(秒) | 300 |
| -C, --clean | 清除会话 | true |
| -S, --ssl | 使用 SSL 连接 | false |
| --certfile | 客户端证书文件路径(如需双向认证) | - |
| --keyfile | 客户端私钥文件路径(如需双向认证) | - |
| --ws | 使用 WebSocket 传输 | false |
| --ifaddr | 本地 IP 地址或接口地址 | - |
创建 100 个并发客户端,每个客户端以 100 条/秒的速率发布消息,主题 bench/%i(%i 为客户端编号),消息大小 256 字节:
shdocker run -it emqx/emqtt-bench pub -c 100 -I 10 -t bench/%i -s 256
通过 --ifaddr 选项指定客户端使用的本地 IP 地址:
shdocker run -it emqx/emqtt-bench pub --ifaddr 192.168.1.10 docker run -it emqx/emqtt-bench sub --ifaddr 192.168.2.10
连接使用 SSL/TLS 加密的 MQTT 服务器(端口通常为 8883):
sh# 订阅测试 docker run -it emqx/emqtt-bench sub -c 100 -i 10 -t bench/%i -p 8883 -S # 发布测试 docker run -it emqx/emqtt-bench pub -c 100 -I 10 -t bench/%i -p 8883 -s 256 -S
使用客户端证书和私钥进行双向 SSL 认证:
sh# 订阅测试(需挂载证书文件到容器内,假设本地证书路径为 /local/certs/) docker run -it -v /local/certs:/certs emqx/emqtt-bench sub -c 100 -i 10 -t bench/%i -p 8883 --certfile /certs/client-cert.pem --keyfile /certs/client-key.pem # 发布测试 docker run -it -v /local/certs:/certs emqx/emqtt-bench pub -c 100 -i 10 -t bench/%i -s 256 -p 8883 --certfile /certs/client-cert.pem --keyfile /certs/client-key.pem
注意:双向 SSL 连接需将本地证书文件挂载到容器内,使用
-v参数指定挂载路径。
-c(客户端数量)选项不应设置超过 60,000。EMQX 团队
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务