MQTT X 1.9.1 发布:资源消耗降低 80%,稳定性大幅提升

news2024/11/22 10:25:24

经过两个 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/342106.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构与算法】单调队列 | 单调栈

🌠作者:阿亮joy. 🎆专栏:《数据结构与算法要啸着学》 🎇座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉…

【Python入门第七天】Python 数字

Python 数字 Python 中有三种数字类型: intfloatcomplex 为变量赋值时,将创建数值类型的变量: 实例 x 10 # int y 6.3 # float z 2j # complex如需验证 Python 中任何对象的类型,请使用 type() 函数: 实…

计算机图形学:中点Bresenham算法画椭圆

作者:非妃是公主 专栏:《计算机图形学》 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录专栏推荐专栏系列文章序一、实现思路二、…

分布式-分布式事务和分布式锁

分布式事务有哪些解决方案 分布式事务 指事务的参与者、支持事务操作的服务器、存储等资源分别位于分布式系统的不同节点之上。 分布式事务就是一个业务操作,是由多个细分操作完成的,而这些细分操作又分布在不同的服务器上;事务&#xff0c…

数据库(第一天)

文档信息 文档类别正式文档文档编号数据库基础课 1.2-001版本1.2-001文档名称数据库基础课编写负责人/编写时间梁昭东/2023 年 1 月 30 日审核负责人/审核时间年 月 日批准人/批准时间年 月 日 变更记录 日期版本号变更内容修订者2023.01.30v1.2版根据实际情况增删了部分内容…

LINUX【线程概念】

线程线程概念线程的优点线程的缺点线程异常线程用途linux进程和线程线程控制pthread 库创建线程线程等待线程退出线程分离线程互斥线程互斥相关概念线程互斥互斥量互斥量接口初始化互斥量销毁互斥量互斥量的加锁和解锁互斥量实现原理线程概念 线程是进程中的一个执行流 一个进程…

ShonyDanza:如何利用Shodan实现自定义的安全研究与网络防护

关于ShonyDanza ShonyDanza是一款支持自定义且易于使用的安全工具,该工具基于Shodan实现其功能,并且可以利用Shodan的强大能力帮助研究人员实现安全研究、安全测试和安全防护等任务。 ShonyDanza的功能包括: 1、根据搜索条件获取IP 2、根据…

LabWindows CVI 2017开发笔记--串口调试软件实例

一、新建工程 打开LabWindows CVI软件,在桌面新建SerialDebug文件夹用来保存工程文件,在欢迎页点击New–>Project 或者在软件首页点击File–>New–>Project 将Project创建在新的Workspace中,设置完成后点击OK 新建一个用户GUI界…

内存溢出、内存泄露的概述及常见情形

内存溢出(OutofMemoryError) 简述 java doc 中对 Out Of Memory Error 的解释是,没有空闲内存,并且垃圾收集器也无法提供更多内存。 JVM 提供的内存管理机制和自动垃圾回收极大的解放了用户对于内存的管理,由于 GC&…

functional interface

更优雅 案例 要在TodoTaskRepository写find方法找到对应task列表,传入自定义的如何find 要传入两个参数,返回一个bool,在文档里找这样的functional interface java8官方文档-Package java.util.function BiPredicate是这样的 接口函数是t…

Numpy基础——人工智能基础

文章目录一、Numpy概述1.优势2.numpy历史3.Numpy的核心:多维数组4.numpy基础4.1 ndarray数组4.2 内存中的ndarray对象一、Numpy概述 1.优势 Numpy(Nummerical Python),补充了Python语言所欠缺的数值计算能力;Numpy是其它数据分析及机器学习库的底层库&…

GitLab CI/CD实现代码推送后自动maven打包发布

1、GitLab CI/CD介绍 CI(Continuous Intergration):即持续集成,将代码的合并、部署、自动化测试都在一起,不断地执行这个过程,并对结果反馈。 CD(Continuous Delivery):即持续交付,持续交付是一种软件工程方…

别具一格的婚礼,VR全景+婚礼的优势展现在哪里?

随着90后、95后逐渐步入结婚的主力军中,如何策划一场别具一格的婚礼是许多年轻人所头疼的,那么今年我们就可以玩点新潮的,VR婚礼或许是个不错的选择。 VR全景婚礼就是通过全景摄像机对婚礼进行记录,不但可以帮助新人捕捉婚礼的精彩…

对S参数的理解II

本篇文章特别感谢粉丝朋友“千年的呢喃”,他给我推荐了一本书,写的非常好 Micro Wave and RF Design,有需要的朋友自行下载。 之前关于S参数也写过几篇文章了,但一直以来都有一个历史遗漏问题没有解决,那就是&#xf…

ElasticSearch-学习笔记05【SpringDataElasticSearch】

Java后端-学习路线-笔记汇总表【黑马程序员】ElasticSearch-学习笔记01【ElasticSearch基本介绍】【day01】ElasticSearch-学习笔记02【ElasticSearch索引库维护】ElasticSearch-学习笔记03【ElasticSearch集群】ElasticSearch-学习笔记04【Java客户端操作索引库】【day02】Ela…

【IVIF的超分重建】

Multimodal super-resolution reconstruction of infrared and visible images via deep learning (基于深度学习的红外和可见光图像多模态超分辨率重建) 提出了一种基于编解码器结构的红外-可见光图像融合方法。图像融合任务被重新表述为保持红外-可见…

2023年3月AMA-CDGA/CDGP数据治理认证考试这些城市可以报名

目前2023年3月5日CDGA&CDGP开放报名的城市有:北京、上海、广州、深圳、杭州、重庆,西安,成都,长沙,济南,更多考场正在增加中… DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业…

Echarts 设置折线图线条样式(虚线+粗细+阴影)

第012个点击查看专栏目录Echarts折线图的lineStyle属性可以设置折线的颜色,粗细,类型,线段末端类型,阴影,透明度,偏移等属性。文章目录示例效果示例源代码(共128行)相关资料参考专栏…

【Java|多线程与高并发】 使用Thread 类创建线程的5种方法如何查看程序中的线程

文章目录前言线程创建1.继承Thread类重写run()方法如何查看程序中的线程?2.实现Runnable接口3.使用匿名内部类,继承Thread4.使用匿名内部类,实现Runnable5.⭐使用Lambda表达式,创建线程(重要)Thread 的常见构造方法总结前言 在这里主要补充说明一些问题,方便更好地理解下面的…

conda安装nodejs版本过低解决方法

conda命令直接安装nodejs时,可能会由于镜像源中nodejs版本过低导致没法安装高本版的nodejs,导致无法jupyterlab使用一些扩展插件。 解决方法如下:(windows环境下直接按提示下载版本安装就行,此处只介绍linux环境的解决…