Mosquitto MQTT TLS 并发压测报告(2025年7月)

Mosquitto MQTT TLS 并发压测报告(2025年7月)

snailszzy
2025-07-18 / 0 评论 / 3 阅读 / 正在检测是否收录...

Mosquitto MQTT TLS 并发压测报告(2025年7月)

一、测试背景

为了验证 Mosquitto 在启用 TLS(双向认证)时的稳定性和并发能力,本次使用 emqtt-bench 工具进行了系统性的性能测试。压测覆盖不同客户端连接数与 Payload 大小组合,记录每轮消息发送速率与系统响应能力。


二、服务器配置环境

•    服务器:阿里云轻量应用服务器
•    CPU:2 vCPU
•    内存:1 GiB
•    存储:30 GiB ESSD 云盘
•    系统:Ubuntu 20.04 LTS
•    Mosquitto 版本:2.0.21
•    TLS 模式:开启双向认证(客户端需提供证书)
•    持久化:启用 persistence = true

三、Mosquitto TLS 配置概要

listener 8883
protocol mqtt

cafile /etc/mosquitto/ca_certificates/ca.crt
certfile /etc/mosquitto/ca_certificates/server.crt
keyfile /etc/mosquitto/ca_certificates/server.key

require_certificate true
allow_anonymous true
use_identity_as_username true
tls_version tlsv1.2

persistence true

说明:

•    启用 TLS 双向验证,并允许匿名连接(用于压测模拟多客户端);
•    use_identity_as_username:将客户端证书的 Common Name (CN) 用作身份;
•    开启 persistence 可在异常或重启后保留 MQTT 状态。

四、压测方法

•    使用 emqtt-bench 中的 mqttx bench 模块进行压测;
•    发送总量:10,000 条消息 / 每轮;
•    消息频率:QoS 1,每 5ms 一条;
•    客户端数目:100、200、400、800;
•    Payload 大小:100B、512B、1KB、2KB;
•    每轮测试完成后记录最大速率、最小速率、耗时。

五、性能测试结果(开启持久化)

Clients Payload Max Rate (msg/s) Min Rate (msg/s) Duration (s)
100 100B 10000 0 7
100 512B 9502 498 6
100 1KB 10000 10000 6
100 2KB 5443 12 7
200 100B 10000 10000 9
200 512B 7027 2973 8
200 1KB 10000 10000 7
200 2KB 6005 3995 7
400 100B 10000 10000 10
400 512B 9510 490 10
400 1KB 8418 1582 11
400 2KB 4998 36 11
800 100B 10000 10000 16
800 512B 8793 1207 18
800 1KB 10000 10000 18
800 2KB 5634 114 18


六、TLS 错误日志观察

在高并发测试期间,Mosquitto 日志中持续出现:

OpenSSL Error[0]: error:0A000126:SSL routines::unexpected eof while reading
Client mqttx_xxxxx closed its connection.

分析说明:

•    此为客户端断开连接时未正确发送 close_notify TLS 结束信号;
•    多数由压测工具模拟断开、连接池中断、网络波动等非优雅断链引起;
•    不影响消息传输,属于日志级提示;
•    开启或关闭 persistence 不显著改变错误频次。

七、结论与建议

•    并发能力强:即使在最低配置 VPS(1GiB/2核)下,Mosquitto 仍支撑 800 并发客户端稳定传输,性能出色;
•    吞吐表现好:1KB Payload 下仍可达 10,000 msg/s;
•    TLS 成本影响明显:随着 Payload 增大,TLS 加解密成本显现,最小速率下滑;
•    persistence 建议视业务使用场景决定,可用于需要保留会话状态的场合。

优化建议:

•    设置更高 max_packet_size 以支持大 Payload;
•    使用 QoS 0 进一步提升性能(适用于容忍丢包的场景);
•    若日志过多,可降低 log_type 或关闭 connection_messages 减轻 I/O 压力。

如需脚本源码或完整配置模板,可留言联系获取。

测试时间:2025年7月


0

评论 (0)

取消