桌面客户端性能提升,优化使用资源消耗

2023-01-05 11:47:08 浏览数 (1)

十二月末,MQTT X 团队发布了 1.9.1-beta.1 版本,这也是 MQTT X 的首个公共测试版。我们希望能够通过测试版本,让更多用户参与到 MQTT X 的测试中来,和我们一起打造一个更加稳定的版本,进而帮助用户轻松使用 MQTT X 完成 MQTT 服务与应用的开发。

在 1.9.1-beta.1 版本中,我们主要优化了 MQTT X 桌面端使用时的部分性能问题,减少了在使用过程中的卡顿现象和内存消耗,优化数据存储方式,减少数据库崩溃的情况;在 MQTT X CLI 中加入自动重连功能,并支持将配置参数保存到配置文件中,减少了每次使用时的参数输入;同时也修复了一些已知的问题。

目前团队正专注于 1.9.1-beta.2 版本的研发,将修复更多社区反馈和测试出的问题,对性能进行更多优化。

最新版本:1.9.1-beta.2 版本

桌面客户端

性能优化

在目前的用户反馈中,我们发现了一些性能问题,比如在使用过程中会出现卡顿现象、内存消耗过大等。我们在 1.9.1-beta.1 版本中对这些问题进行了优化。

我们使用 MQTT X CLI 的 bench 命令,设置以每秒 100 条消息的速率向 mqttx/bench 主题发布消息,并将 MQTT X 运行在开发环境中,连接上同一个 MQTT 服务,然后订阅 mqttx/bench 主题,最后使用性能监控工具来对 MQTT X 进行性能监控,在差不多同等时间和环境内来对比区分我们在优化前后的性能变化,以便于更好地了解当前的优化效果。

bench 命令如下:

代码语言:text复制
mqttx bench pub -c 100 -t mqttx/bench -m hello

JS heap size 是指 JavaScript 引擎在运行时分配的内存大小

优化前

优化后

我们可以看到内存使用在优化前接近 600MB 左右,CPU 使用率基本维持 98% 左右,优化后内存维持在 380MB 左右,CPU 使用率维持在 60% 左右,内存和 CPU 的使用率都有了明显的下降。后续我们将继续优化这些性能问题,可以基本满足用户使用时在接收大量主题消息的情况下,仍然能够保持较低的 CPU 和内存使用率。

支持批量存储

在该测试版中,我们支持了消息和数据的批量存储,当用户接收大量的消息时,避免了数据库的频繁写入,提高了性能,同时也减少了数据库压力和内存与 CPU 消耗,防止部分数据库在使用时崩溃的问题。

该性能优化目前仍在进行中,预计将在 1.9.1 正式版中,全面优化这些卡顿及性能问题。

主题输入框提示

在之前的版本中,很多新手用户在使用时无法快速准确的找到输入主题的地方。当建立连接后,我们需要手动输入主题并填写 payload 后,才能够发送消息。

在该测试版中,我们优化了主题输入框的提示功能,当用户未输入主题时,提示框将显示高亮,以便提醒用户在界面中高亮的主题输入框内输入发送主题。

命令行客户端

MQTT X CLI 在 1.9.1-beta.1 的测试版中,主要是添加了以下两个较大的新功能,为用户提供更好的使用体验。

支持自动重连

命令行工具同样也支持了自动重连功能,当连接断开时将自动重连,无需手动重连。支持设置重连周期以及最大重连次数。

代码语言:text复制
# 以连接命令时的自动重连次数配置为例,修改为 5 次,重连周期为 5000 毫秒
mqttx conn -h 'broker.emqx.io' -p 1883 --maximun-reconnect-times 5 --reconnect-period 5000

支持配置文件

支持将连接、订阅和发布时的参数保存到配置文件中,减少用户在使用时的参数配置次数,快速复用配置文件中的参数来连接、订阅和发布消息。保存和加载配置文件的路径也可以由用户自行定义。

代码语言:text复制
# 以连接命令时的配置文件为例,保存配置文件到当前目录下的 mqttx.json 文件中
mqttx conn -h 'broker.emqx.io' -p 1883 --save mqttx.json
# 加载当前目录下的 mqttx.json 文件中的连接配置
mqttx conn --config mqttx.json

上述两个新功能同样支持在 MQTT X CLI 的 bench 命令中使用,方便用户性能测试时快速测试连接、订阅和发布消息等。

未来规划

MQTT X 还在持续增强完善中,以期为用户带来更多实用、强大的功能,为物联网应用与服务的测试和开发提供便利。接下来我们将重点关注以下方面,敬请期待:

  • 接收消息和存储时的性能优化,大量消息不卡顿(继续减少 CPU 和内存的消耗)
  • 可配置忽略 QoS 0 的消息存储,以减少存储空间的占用
  • MQTT Debug 功能
  • 接收到的消息可以进行自动图表绘制
  • 插件功能
  • 脚本测试自动化(Flow)

版权声明: 本文为 EMQ 原创,转载请注明出处。

原文链接:https://www.emqx.com/zh/blog/mqttx-newsletter-202212?utm_source=cloud.tencent.com&utm_medium=referral

0 人点赞