⸻
【MQTT TLS 性能测试报告】基于 Mosquitto + emqtt-bench 在轻量服务器环境下压测结果
一、测试目的
验证 Mosquitto 2.0.21 在启用 TLS(双向认证)场景下的并发处理能力,观察连接数、消息速率、Payload 大小对性能的影响。同时关注系统稳定性及是否出现 TLS 异常。
⸻
二、测试环境
服务器配置(阿里云轻量):
• 2 vCPU / 1 GiB 内存
• 30 GiB ESSD 云盘
• Ubuntu 20.04 LTS
• Mosquitto 2.0.21 + TLS 双向认证配置
• persistence false(已关闭持久化)
客户端工具:
• mqttx bench(来自 emqx/emqtt-bench)
• MacBook Pro M1 上运行
• 脚本通过循环自动完成不同 clients + payload 组合测试
⸻
三、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 false
⸻
四、测试组合与结果
每轮测试均发送 10,000 条消息,QoS 1,间隔 5ms,统计耗时、最大速率与最小速率。
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
⸻
五、分析与结论
• 吞吐表现:即便在 800 并发客户端、1KB payload 情况下,也能稳定达到 1 万条每秒,表现优异。
• 瓶颈初现:在 payload 达 2KB 时部分组合(如 800 clients)最小速率明显下降,表明 TLS 数据包体积增大后服务端处理能力接近上限。
• 资源限制影响:由于服务器为 1GiB 内存、2核 CPU,配置偏低,已能支撑 800 并发连接高负载传输,说明 Mosquitto TLS 性能调优良好。
• persistence 关闭效果:测试过程中未观察到严重阻塞或数据库写入延迟问题,适用于只需传输实时消息、不需重启后恢复场景。
⸻
六、TLS 报错说明
测试中仍可见如下服务端日志:
OpenSSL Error[0]: error:0A000126:SSL routines::unexpected eof while reading
Client mqttx_xxxxx closed its connection.
这些报错说明:
• 客户端主动断开连接但未发送 TLS close_notify 消息,属于 非优雅关闭;
• 多见于压测工具、网络中断、连接池强制释放;
• 并不会影响 MQTT 功能或数据传输;
• 关闭 persistence 后该错误频次无明显减少,因此并非由持久化操作导致。
⸻
七、总结
Mosquitto 作为轻量级 MQTT Broker,即使在 TLS 双向认证场景下,在资源有限的轻量服务器上依然具备较强并发处理能力,适用于中小规模物联网平台部署。
建议优化方向:
• 如需更高 payload 支撑能力,可增加 max_packet_size 配置;
• 考虑禁用 connection_messages 减少日志压力;
• 如需持久化支持可启用 persistence true 并调优 autosave_interval。
⸻
评论 (0)