emqtt_bench 是基于 Erlang 编写的,一个简洁强大的 MQTT 协议性能测试工具,emqtt_bench的运行依赖于 Erlang/OTP 21.2 以上版本运行环境,建议使用erlang1:24.1.5-1
1 下载 emqtt-bench 最新代码,并编译
# 下载emqtt-bench源码
git clone https://github.com/emqx/emqtt-bench
cd emqtt-bench
# 安装编译所需包
sudo apt install libatomic1
# 执行编译
make
2 安装cmake命令
编译过程可能会报错缺少cmake命令
执行
# 安装cmake
sudo apt install cmake
再进行编译,出现下图证明编译完成
编译完成过后emqtt_bench文件内容如下
3 安装完成
3.1 查看是否安装成功
执行./emqtt_bench,出现如下内容则证明 emqtt_bench 已正确安装到主机
3.2 修改系统参数
# 增加句柄
ulimit -n 200000
# 增加端口
sudo sysctl -w net.ipv4.ip_local_port_range="1025 65534"
# 查看端口范围
cat /proc/sys/net/ipv4/ip_local_port_range
4 常用命令
emqx普通tcp连接默认端口为1883,ssl双向认证默认端口为8883
使用ssl连接时需要将erlang升级到erlang opt 25,具体版本为1:25.0-1
4.1 连接数测试
1.查看帮助
./emqtt_bench conn --help
参数 | 简写 | 可选值 | 默认值 | 说明 |
---|---|---|---|---|
--host | -h | - | localhost | 要连接的 MQTT 服务器地址 |
--port | -p | - | 1883 | MQTT 服务端口 |
--version | -V | 3 4 5 | 5 | 使用的 MQTT 协议版本 |
--count | -c | - | 200 | 客户端总数 |
--startnumber | -n | - | 0 | 客户端数量起始值 |
--interval | -i | - | 10 | 每间隔多少时间创建一个客户端;单位:毫秒 |
--interval_of_msg | -I | - | 1000 | 每间隔多少时间发送一个消息 |
--username | -u | - | 无;非必选 | 客户端用户名 |
--password | -P | - | 无;非必选 | 客户端密码 |
--topic | -t | - | 无;必选 | 发布的主题;支持站位符:%c :表示 ClientId%u :表示 Username%i :表示客户端的序列数 |
--szie | -s | - | 256 | 消息 Payload 的大小;单位:字节 |
--qos | -q | - | 0 | Qos 等级 |
--retain | -r | true false | false | 消息是否设置 Retain 标志 |
--keepalive | -k | - | 300 | 客户端心跳时间 |
--clean | -C | true false | true | 是否以清除会话的方式建立连接 |
--ssl | -S | true false | false | 是否启用 SSL |
--certfile | - | - | 无 | 客户端 SSL 证书 |
--keyfile | - | - | 无 | 客户端 SSL 秘钥文件 |
--ws | - | true false | false | 是否以 Websocket 的方式建立连接 |
--ifaddr | - | - | 无 | 指定客户端连接使用的本地网卡 |
2.普通tcp连接
./emqtt_bench conn -h 127.0.0.1 -u root -P 123456 -c 50000 -R 1000 -k 300 -C false -p 1883
3.ssl双向认证连接
./emqtt_bench conn -h 127.0.0.1 -u root -P 123456 -c 50000 -R 1000 --certfile /home/ubuntu/mycerts/client.pem --keyfile /home/ubuntu/mycerts/client.key -S -k 300 -C true -p 8883
4.2 发布测试
1.查看帮助
./emqtt_bench pub --help
-I:每间隔多少时间发送一个消息(ms)
-t:发布的主题;支持站位符(%c:表示 ClientId,%u:表示 Username,%i:表示客户端的序列数)
-s:消息 Payload 的大小;单位:字节
-q:Qos 等级(0,1,2)默认为0
-r:消息是否设置 Retain 标志,默认为false
2.普通tcp连接发送
./emqtt_bench pub -h 127.0.0.1 -u root -P 123456 -c 50000 -R 1000 -I 25000 -t iot/commands/set/i% -s 2048 -q 1 -r true -k 300 -C false -p 1883
3.ssl双向认证连接
./emqtt_bench pub -h 127.0.0.1 -u root -P 123456 -c 20 -R 10 -I 2000 -t iot/commands/set/test --certfile /home/ubuntu/mycerts/client.pem --keyfile /home/ubuntu/mycerts/client.key -S -s 2048 -q 0 -r true -k 300 -C false -p 8883
4.3 订阅测试
1.查看帮助
./emqtt_bench sub --help
2.普通tcp连接
./emqtt_bench sub -h 127.0.0.1 -u root -P 123456 -c 50000 -i 4 -t iot/commands/set/%i -q 1 -k 300 -C false -p 1883
3.ssl双向认证连接
./emqtt_bench sub -h 127.0.0.1 -u root -P 123456 -c 10000 -R 1000 -t iot/commands/set/test --certfile /home/ubuntu/mycerts/client.pem --keyfile /home/ubuntu/mycerts/client.key -S -p 8883 -q 0 -k 300 -C false