echo
1
EMQX 版本
EMQX V5.3.2
EMQX 安装部署方式
通过docker部署
EMQX 集群情况
未使用集群
服务器(运行 EMQX 的机器)硬件配置
8核4G
服务器操作系统和平台
Ubuntu20.04 x64
问题描述
服务端使用,压测一切正常。
客户端为 C++平台 使用paho.mqtt.cpp库进行连接和消息的发布。
测试采用单线程循环发布,当发布消息qos为0时,每秒发布消息为3000-4000。
当发布消息qos为1时,每秒发布消息条数为400左右。
当发布消息qos为2时,每秒发布信息条数为200左右。
请问这个性能是否正常
Shawn
2
QoS1 和 QoS2 的消息需要等待 ACK,所以感觉是正常的。单个 MQTT 连接的吞吐不会很高,需要你增加 MQTT 连接数才能达到高吞吐的目的。
echo
3
QOS 1只是多了一个PUBACK包,但是TPS却下降到了原来的大约1/10,这是什么原因?
Shawn
4
-
我理解你的场景是单个 MQTT 连接向 emqx 发送数据,没有订阅者,测试单个连接最大的吞度,对吗?
-
emqx 有没有开启任何鉴权或者数据集成的插件和功能?
-
网络环境是内网、公网,还是客户端跟 emqx 在同一台机器上?
很可能是因为客户端在等待服务端应答 PUBACK。emqx 每收到一个 qos1 报文都会立即回复 PUBACK,至于为什么每秒只能有 400 个,你可以查看一下是否 emqx 已经出现瓶颈:
emqx eval 'observer_cli:start()'
然后输入 mq
回车。如果出现 message queue 比较大的进程说明已经有瓶颈。
如果没有瓶颈,可能还是 MQTT 流程的影响:客户端每发送一个 PUBLISH 报文,都需要等待一个 PUBACK,会极大降低整个交互的吞吐,通过增大客户端的 Inflight window,可以减轻这个问题。可能是这个:Paho MQTT C Client Library: MQTTClient_connectOptions Struct Reference