经过两个 Beta 版本迭代,近日,MQTT 5.0 客户端工具 MQTT X 正式发布了 1.9.1 稳定版本。

该版本通过大规模性能优化以及已知问题修复实现了稳定性的飞跃提升。特别是在性能方面,以接收大量消息场景为例,v1.9.1 相比于上一版本,使用时的 CPU 资源消耗与内存占用减少 80%,整体性能得到大幅优化提升,极大降低了系统崩溃风险。极高的稳定性将为用户进行物联网性能测试,进而构建物联网应用,提供更加可靠的保障。

最新版本:点击下载

桌面客户端

性能优化

在 1.9.1 版本中,我们针对 MQTT X 的桌面客户端应用进行了大量性能优化工作,以提升在接收大量消息时点击主题过滤的性能表现,同时避免该场景下可能产生的 CPU 资源消耗过高,从而导致应用卡顿的问题。 此外,此前在 Windows 系统中,很多用户还遇到过因接收大量消息导致数据库崩溃,无法正常打开使用的情况。这些问题均在最新版本中得到了优化解决,有效提升了用户的使用体验。

对比测试

我们使用 MQTT X CLI 的 bench 命令,对比测试了 1.9.0 版本与 1.9.1 版本的性能表现。

测试场景

新建一个本地 MQTT Broker 连接,并订阅一个 mqttx/bench 主题,然后使用 bench 命令,每秒向该主题发送 1000 条消息,消息内容为一个 hello 的字符串文本,QoS 为 0,持续时间为 1 分钟。在每秒接收 1000 条消息的场景下,我们使用 MQTT X 开发环境中的调试工具时来观察和监控 CPU 占用率与内存占用的变化情况。

测试结果

监控图中的 JS heap size 即为内存占用

分析与结论

从当前测试结果表现来看,1.9.0 版本中,在接收消息时,CPU 占用率基本维持在 100%,内存占用率最高时接近到了 2000MB,后面也基本维持在 1000MB 左右的消耗,且页面也基本无法正常使用,使用时比较卡顿。

而相比之下,1.9.1 版本在接收大量消息时,CPU 占用率平均在 50% 上下,虽然内存占用率最高时接近到了 200MB,但后面基本维持在 150MB 左右的消耗,且页面刷新流畅,使用时也无卡顿现象。

通过测试比较可发现,从内存与 CPU 消耗两项数据来看,最新版本的 MQTT X 桌面客户端性能优化提升了约 80%;从使用体验角度,页面卡顿或崩溃问题也明显改善。

除接收消息时的性能优化外,我们还对点击过滤主题和搜索消息时的性能进行了优化,支持批量存储消息数据,避免了数据库崩溃等问题。

交互提升

在之前的版本中,接收到新消息时默认设置了自动滚动到最新消息位置,这为用户查看历史消息带来了一丝不便。而关闭该设置又将导致用户无法及时查看到最新消息。

1.9.1 版本通过在消息列表下方显示新消息提示的方式改善了上述问题。在收到新消息后,用户可自行选择停留在当前页面继续查看历史消息,也可点击提示跳转至最新消息位置。这一交互模式改进将使用户的 MQTT X 操作体验更加顺畅。

问题修复与优化

除性能优化外,该版本还对以下已知问题进行了修复和优化:

  • 修复导入和导出数据的完整性和正确性,并优化导入时的加载速度等;
  • 修复了当使用 客户端 ID + 密码认证时,必须输入用户名的问题;
  • 修复了重连后,无法接收到离线消息的问题;
  • 修复了在某些情况下,消息列表中的消息顺序不正确的问题;
  • 修复在用户属性配置中不能填写多个相同的 key 的问题,100% 适配 MQTT 协议;
  • 修复分组名称过长导致分组图标消失的问题,且支持长分组名称进行全量显示;
  • 修复分组列表中,点击右键菜单显示超出窗口的问题;
  • 修复点击流量统计并自动订阅系统主题 $SYS/# 后,导致其他订阅的主题消失的问题;
  • 修复订阅主题窗口,未能正确重置订阅主题配置的问题;
  • 修复当手动调整窗口大小时,导致 Payload 编辑器未能正确适配宽度的问题;
  • 修复新建窗口时的连接高亮显示的问题;
  • 将帮助页面调整为「关于 MQTT 的一些」并作为一级菜单,方便用户学习 MQTT 的相关知识;
  • 优化点击发送按钮时的状态显示,避免用户误以为点击发送失败;
  • 优化点击订阅按钮时,未连接状态的提醒;
  • 优化主题输入框的填写的提示等。

命令行客户端

输出时间格式调整

为使用户查看和记录当前的测试时间更加准确,在最新的 MQTT X CLI 1.9.1 版本中,我们优化了输出的日志内容,为时间格式添加了 年-月-日 的显示,如下所示:

$ mqttx conn -h broker.emqx.io -p 1883
[2/2/2023] [2:54:50 PM] › … Connecting...
[2/2/2023] [2:54:53 PM] › Connected

后续我们将支持用户通过自定义配置的方式来修改日期格式显示,方便用户将测试结果与自己的日志文件结合,也方便集中管理和查看。

其它

除日期格式调整外,命令行客户端也已经在 1.9.1 beta 测试版中加入了很多易用的新功能:

  • 支持自动重连。MQTT X CLI 命令行客户端将在断开连接后自动重连,此功能同样适用于 bench 命令。
  • 现在用户可以将连接参数保存到本地配置文件中,下次连接时可以直接读取本地配置文件中的参数,无需再次输入,且支持对所有 CLI 中的命令进行保存。
  • 支持消息的格式转换,支持对接收到的消息使用 StringHexBase64JSON 等格式进行转换,方便用户查看和记录消息内容等。

以上均已发布在 1.9.1 正式版中,相关新功能的详细介绍可参考之前发布的 beta 版本文章:MQTT X newsletter 2022-11

未来规划

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

  • MQTT Debug 功能
  • 为系统主题的输出内容进行优化,方便用户使用 MQTT X 监控和查看 MQTT Broker 数据指标
  • 接收到的消息可以进行自动图表绘制
  • 插件功能
  • 支持 Sparkplug B 格式
  • 脚本测试自动化(Flow)
  • 增强消息格式转换功能

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

原文链接:https://www.emqx.com/zh/blog/mqttx-v-1-9-1-release-notes

MQTT X 1.9.1 发布:资源消耗降低 80%,稳定性大幅提升的更多相关文章

  1. 10gocm->session5->数据库管理实验->GC资源管理器的资源消耗组介绍

    <GC资源管理器>  官方文件:administrator's Guide->24 Using the Database Resource Manager 用法:在实际生产环境中使用 ...

  2. Windows中查看进程的资源消耗(cpu, Disk,Memory,NetWork)

    1.通过Windows Task Manager 的 Performance Tab 可以看到总体的性能消耗情况. 2.如果想看系统中每个进程的资源消耗,可以点击 下面的 Open Resource ...

  3. HashSet非常的消耗空间,TreeSet因为有排序功能,因此资源消耗非常的高,我们应该尽量少使用

    注:HashMap底层也是用数组,HashSet底层实际上也是HashMap,HashSet类中有HashMap属性(我们如何在API中查属性).HashSet实际上为(key.null)类型的Has ...

  4. javaCV开发详解之8:转封装在rtsp转rtmp流中的应用(无须转码,更低的资源消耗)

    javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...

  5. iOS构建流畅的交互界面--CPU,GPU资源消耗的原因和解决方案

    CPU资源消耗的原因和解决方案对象创建轻量对象代替重量对象* 不需要响应触摸事件的控件:CALayer显示* 对象不涉及UI操作,则尽量放到后台线程创建* 包含有CALayer的控件只能在主线程创建和 ...

  6. 整理一下在 npmjs.com 上面发布资源包踩过的坑

    正常流程就不说了,网上有很多,比如写代码.打包.注册.登录.发布等. 邮箱要激活 在 npmjs.com 上面注册账号的时候需要填写邮箱,然后登录网址的时候并没有强制要求你去邮箱激活. 但是到了发布资 ...

  7. 【数据结构&算法】02-复杂度分析之执行效率和资源消耗

    目录 前言 复杂度 分析方法 大 O 复杂度表示法 例子-评估累加和的各种算法执行效率 算法 1(for 循环): 算法 2(嵌套 for 循环): 大 O 表示 时间复杂度分析 关注执行最多的一段代 ...

  8. EMQ学习---客户链接资源消耗

    Erlang进程消耗EMQ对客户端链接使用链接进程(emqtt_client)和session进程(emqtt_session)分开的策略. 当一个mqtt的客户端连接到EMQ的服务器上的时候,首先会 ...

  9. 解决CentOS 7中php-fpm进程数过多导致服务器内存资源消耗较大的问题

    本文由荒原之梦原创,原文链接:http://zhaokaifeng.com/?p=653 什么是php-fpm: php-fpm即FastCGI进程管理器,用于控制php的内存和进程等. 操作环境: ...

  10. MQTT的学习之Mosquitto发布-订阅(2)

    在<MQTT的学习之Mosquitto安装&使用(1)>一文末尾,我已经模拟了发布-订阅模式,只是那时在服务器直接模拟的,并不是java代码模拟的.下面贴出Java代码 1.首先引 ...

随机推荐

  1. 解决veture和eslint冲突的问题

    vscoder自带的veture和eslint存在冲突,主要表现在 末尾逗号,分号,单双引号的不一致.解决办法:1.npm install --save-dev prettier2.在根目录新建.pr ...

  2. 在VSCode中配置代码自动 eslint 格式化 (实测有用)

    一.Eslint Eslint 是用来检测和规范代码格式的工具,应用在工程化项目中,可以保证项目代码格式的一致性和规范性,大大提升了代码的可读性.   二.配置过程 本博客是讲述对一个已经引用 esl ...

  3. vue-seamless-scroll滚动加点赞衔接处数据不同步问题

    VUE使用vue-seamless-scroll自动滚动加点赞,因为有两个overhidden导致点击不同同步dom,在代码中会出现两处vue-seamless-scroll上下悬接,悬接处点赞触发没 ...

  4. 看完这一篇,ShardingSphere-jdbc 实战再也不怕了

    谈到分库分表中间件时,我们自然而然的会想到 ShardingSphere-JDBC . 这篇文章,我们聊聊 ShardingSphere-JDBC 相关知识点,并实战演示一番. 1 ShardingS ...

  5. Android 缩小动画

    public class MainActivity extends AppCompatActivity { private ConstraintLayout content; @Override pr ...

  6. mybatis动态标签——where、if

    mapper接口 public interface EmpMapper { List<Emp> getEmp(Emp emp); } mapper.xml <?xml version ...

  7. lg8365题解

    容易发现我们一定会先加后乘,使用调整法可以证明这个结论. 并且可以发现除了\(a_i\)值为\(1\)的数外(假设他们的\(a\)值和为\(s\)),其他的数最多只会选\(1\)个做加法操作(设如果其 ...

  8. C# HttpClient 上传大文件带进度

    在Httpclient 上传文件时 需要显示进度,需要添加 ProgressMessageHandler 在NuGet中添加 引用Microsoft.AspNet.WebApi.Client  一下是 ...

  9. ChatGPT is at capacity right now.ChatGPT Plus subscriber login Add your email for a personalized login link的解决办法

    原因 你的ip地区用的人过多. 解决办法 在右侧页面填入邮箱,能收到邮件立刻就能登录,如果没有,就换地区试试,不行就等等吧 邮件示例:

  10. js 对象命名

    JS 标识符的命名规则,即变量的命名规则: 标识符只能由字母.数字.下划线和'$'组成 数字不可以作为标识符的首字符 对象属性的命名规则 通过[]操作符为对象添加属性时,属性名称可以是任何字符串(包括 ...