经过两个 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. Java基础语法:运算符、包机制、JavaDoc

    Java基础语法:运算符.包机制.JavaDoc 自增.自减.一元运算符:++.-- 例子:b = a++; -->先给b赋值,a再自增:b=a; a=a+1; b = ++a; -->a ...

  2. ABP微服务系列学习-使用Tye启动微服务

    Tye是微软开源的一款开发人员工具, 能够用于简化微服务以及分布式应用程序的开发.测试以及部署过程.Tye 的首要目标是简化微服务的开发,具体方式包括仅用一行命令执行多项服务.在容器中使用依赖项目,以 ...

  3. pat乙级1023 组个最小数

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> ...

  4. (unsigned)short溢出后隐式转换为int

    同学被面试官问到一个细节中的细节,虽然个人觉得意义不大,但还是好奇并在和同学一起实验后搞清楚了,记录一下 如下: int main() { unsigned short a = 65535, b = ...

  5. 10base-t的数据发送

    功能 数据流(NIC) pin码 发送信号 发送回路 1 2 接收信号 接收回路 3 不使用   4 不使用   5 接收信号 接收回路 6 不使用   7 不使用   8 上图是基于10BASE-T ...

  6. Windows Python2.7环境 安装paramiko模块(转)

    http://t.zoukankan.com/staffyoung-p-5587450.html 链接,网上大多数都是同一篇文章 Paramiko是用python语言写的一个模块,遵循SSH2协议,支 ...

  7. iOS开发 调试技巧

    1.普通断点 2.条件断点 3.全局断点 4.analyze 分析器 5.leaks 检查器 6.僵尸对象 7.lldb 命令 8.instruments 9.xcode视图调试

  8. c++练习266题:楼层编号

    *266题 原题传送门:http://oj.tfls.net/p/266 题解: #include<bits/stdc++.h>using namespace std; int t;//高 ...

  9. gitignore文件中忽略项不起作用的解决方法

    在使用git的时候会遇到这样的情况,我们生产的一些class或者target的目录,我不能提交,这个时候我们需要使用gitignore,但是有的时候虽然添加了,但是不起作用. 情况:开发过程中,我们自 ...

  10. poi 5.2 导出

    如果能给你带来帮助,不胜荣幸,如果有错误也请批评指正. 1:maven 依赖,现在好多都是用的poi 3.6 和 poi3.9 的jar,项目升级了,现在得用5.x的了,所以就用5.x的给大家简单的演 ...