经过两个 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. 修改安卓ID为硬件唯一ID

    前言: 最近接到个需求,我们新产品上的外包侧APP需要使用硬件唯一ID(不管怎么升级怎么操作,ID始终不变和硬件绑定),用来做权限校验. 由于了解到安卓ID或序列号都会在擦除升级后重新随机生成,所以这 ...

  2. css3自动滚动

    <!DOCTYPE html> <html lang="en"><div class="wrap"> <ul clas ...

  3. LeetCode-689 三个无重叠子数组的最大和

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximum-sum-of-3-non-overlapping-subarrays 题目描述 ...

  4. Java内存分析利器——Eclipse Memory Analyzer工具的使用

    一.如何下载Java程序的dump内存文件并离线导入到MemoryAnalyser工具进行分析 1.jps查看Java应用的pid   jps 11584216168084 Launcher24792 ...

  5. mysql 服务安装与配置

    数据库服务下载与安装: 下载地址:MySQL Community Server 安装:跟随引导一路下一步,建议配置root密码,不然安装成功cmd验证却是要求密码.没有密码还需要执行命令重新设置密码, ...

  6. soursetree 关于https:git remote: Unauthorized和username和password修改

    一.sourcetree推送代码提交不上提示https:git remote: Unauthorized由于没有权限,需要登陆正确的账号以及密码即可以提交 二.SourceTree这是一个无效源路径/ ...

  7. bootstrapTable的一些属性

    url : 'firmSoftTable.action', // 请求后台的URL(*) method : 'post', // 请求方式(*)post/get contentType: " ...

  8. 一步一步地完成题目——费解的开关(C/C++语言)递推、递归、顺序思维

    前言 本文中博主将一步一步地.以正常人的顺序思维完成题目--费解的开关,使用的核心方法是递推与递归. 题目 参考题目:费解的开关 详细的题目信息相信大家都已经知道了,因此这里为了简洁只展示输入输出格式 ...

  9. CSS主要整理

    css主要整理 // 右侧悬浮导航 /* 侧栏开始 */ #home { position: relative } // 悬浮 #home .xf { width: 67.6923076923077p ...

  10. JavaSE——subString()方法

    package com.zhao.stringtest;public class Test4 { //手机号屏蔽中间四位 //subString(int beginIndex,int endIndex ...