MQTT 简介

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是 IBM 开发的一个即时通讯协议,它比较适合于在低带宽、不可靠的网络的进行远程传感器和控制设备通讯等,正在日益成为物联网通信协议的重要组成部分。MQTT 是目前最流行的物联网协议之一,主要用于移动 Push,移动 IM,物联网 M2M,物联网采集等,这些应用场景的特点是客户端的连接设备数比较多,那么如何在系统上线之前验证系统能否承受预先设计的压力呢?

XMeter 因此专门开发(并维护)了 MQTT JMeter 插件,用户可以很方便地测试 MQTT 服务器的性能:添加 MQTT 连接、发布、订阅取样器,构造组合的应用场景,例如背景连接、多发少收、少发多收,计算消息转发时延等。利用该插件,我们为EMQ成功实施了包括百万级并发连接在内的一系列测试场景,这里有详细的测试报告。

今天我们来详细介绍一下怎么使用这个插件。

安装

从github下载您需要的 release 版本, 解压 mqtt-xmeter-jar-with-dependencies.jar.zip, 将生成的 jar 文件放到 JMeter 安装主目录的 lib/ext 下,重启 JMeter,就可以看到插件成功加载。

插件各属性介绍

1.连接操作取样器

Server name or IP: 指向被测 MQTT 服务器地址。【注】为灵活起见,属性值都可以引用 JMeter 的系统或自定义变量。

Port number: 通常 TCP 连接的端口是 1883, SSL 连接则是 8883。请参照服务器的具体配置。

Timeout(s): 连接超时设置,以秒为单位。

Protocols: 客户端与服务器通过 SSL 加密通道连接时,可以选择单向或者双向认证 (Dual)。双向认证时,您还需要指定相应的信任秘钥库 (Trust Key Store), 客户端证书,以及对应的文件保护密码 (Secret)。

这些文件可以通过服务器的证书配置转化得到。例如,对于EMQ的安装部署,/etc/cert 下就存放了自签证的 CA,服务器及客户端证书,参考下面的命令就可以生成插件所需的.jks, .p12 文件,secret 自行指定即可。

exportPATH=$PATH:/bin

keytool -import -alias cacert -keystore emqtt.jks -file cacert.pem -storepass -trustcacerts -noprompt

keytool -import -alias client -keystore emqtt.jks -file client-cert.pem -storepass

keytool -import -alias server -keystore emqtt.jks -file cert.pem -storepass

openssl pkcs12 -export -inkey client-key.pem -in client-cert.pem -out client.p12 -password pass:

User authentication: 如果服务器配置了用户认证,您需要提供相应的用户名和口令。

ClientId prefix: 标识客户端的固定前缀,每个连接 (虚拟用户) 再添加一个 uuid 串,整个作为客户标识。

Keep alive(s): 心跳信号发送间隔。例如,300 表示客户端每隔 300 秒向服务器发出 ping 请求,以保持连接活跃。

Connection keep time(s): 连接建立后,保持该连接的时长。例如,1800 表示 1800 秒之后连接将被关闭,即使一直发送心跳信号。

Connect attempt max: 第一次连接过程中,尝试重连的最大次数。超过该次数则认为连接失败。

Reconnect attempt max: 后继连接过程中,尝试重连的最大次数。超过该次数则认为连接失败。

2.发布操作取样器

发布 (Pub) 取样器的连接相关属性与连接取样器完全相同,下面只介绍 Pub 特有的属性。

QoS Level: 服务质量,取值为 0,1,2,分别代表 MQTT 协议规范里的至多一次(AT_MOST_ONCE),至少一次(AT_LEAST_ONCE),精确一次(EXACTLY_ONCE)

Topic name: 发布消息所属的话题(订阅方可以根据话题不同选择订阅)

Add timestamp in payload: 如果勾选,发布的消息体开头会附带当前时间戳,利用它可以在消息接收端计算消息达到的延时。不勾选则只发送实际的消息体。

Message type: 目前支持三种消息类型

String: 普通字符串(如上面截图所示)

Hex String: 以 16 进制数值表示的串,比如字符串 Hello, 可以表示为 48656C6C6F (其中,48 在 ascii 表中对应字母 H,依次类推)。通常 16 进制串用来构造非文本的消息体,例如描述某些私有的协议交互和控制信息等等。

Random string with fixed length: 按指定长度生成随机的串作为消息体。

3. 订阅操作取样器

QoS Level: 服务质量,含义与发布操作取样器相同。

Topic name: 订阅消息所属的话题。

Payload includes timestamp: 如果勾选,会从消息体开头处解析发送时间戳,用于计算消息的接收延时。

Debug response: 如果勾选,消息内容会打印在 JMeter 的响应结果中,用于调试目的。正式运行测试建议不勾选。

混合负载的测试场景

运用以上 3 种 MQTT 取样器,结合 JMeter 灵活的测试控制,您可以制定各种类型的测试场景。下面我们举一个例子,构造一个混合负载的场景。

¡ 连接者:虚拟用户数=10, 发起 10 个到服务器的背景连接,每 2 秒钟发一次心跳请求,15 秒后断连。

¡ 发布者:虚拟用户数=5,每隔一秒发送一条 32 字节的随机串,带时间戳,循环 10 次结束。

¡ 订阅者:虚拟用户数=2,接收相应话题上的消息,每隔一秒输出采样间隔里接收到的消息统计,循环 10 次结束。

在 JMeter 中运行该场景,15 秒钟左右运行结束。可以在测试结果树中看到每个操作的详细信息。表格视图的"Sample Time"列出了操作花费的时间 (毫秒)。由于这次测试在本地,并发用户数很少,所以连接、消息发送、接收时延都很短。您可以指向实际的 MQTT 服务器,模拟更大的并发用户数。

在被测的EMQ服务器自己的度量仪表盘,我们可以看到连接、消息发送,接收等统计信息。

【注】服务器的"received", "sent"分别对应 JMeter 测试中的 “发送者” 和 “订阅者”。

利用 XMeter 实施云上的高负载压力测试

JMeter 支持的负载有限,而且压力机需要人工管理,为方便用户实施大规模的并发测试,XMeter 性能测试云服务将 JMeter 支持的运行场景迁移到云端,按需 “弹性” 地分配测试资源,发起到目标机器的压力测试,衡量被测系统的性能表现。

我们只需上传调试好的 JMeter 脚本,在 XMeter 指定并发数和运行时间,就可以在网页上查看各项性能指标。

利用 MQTT-JMeter 插件,我们为EMQ成功实施了包括百万级并发连接在内的一系列测试场景,这里有详细的测试报告。

希望这个开源的插件和 XMeter 在线服务也能为您测试 MQTT 带来一些便利。如果有任何问题,请联系我们。

新版插件新增功能介绍

1. ClientID

标识客户端的 ClientId 现在可以进行精确控制,而不是旧版本里只允许输入前缀,剩下的由系统自动生成。该功能是考虑到一些 Azure 的物联网平台的用户需要输入精确的 ClientId。如下图所示:如果用户没有选中 “Add random client id suffix”,那么 ClientId 输入框中的值就会被作为该虚拟用户的 ClientId 值。

2. 同虚拟用户下共享MQTT连接

之前的版本中,每创建一个 Pub/Sub 的 Sampler 都会生成一个 MQTT 连接,这对于想模拟一些物联网的场景的时候并不适用。比如某物联网设备除了向服务器发送传感器采集的数据之外,还需要接受从服务器端发送过来的控制消息,而这两部分发送和接收消息会使用同一个连接。现在 Pub/Sub 的 Sampler 提供了一个选项允许用户共享连接的选项。如下图所示增加的 “Share conn in thread”。在同一个线程组中,如果有多个 Sampler 勾选了该选项,那么第一个被初始化的 Sampler 中的连接选项会被作为共享的连接的配置,剩下的 Sampler 中的连接配置会被忽略,因为使用的是第一个共享连接的配置。

下面是几个例子:

ThreadGroupSample1

PubSampler1 (shared connection), 该连接的配置作为共享连接的设置

SubSampler1 (shared connection), 使用在 PubSampler1 创建的连接,该 Sampler 中的配置将被忽略

ThreadGroupSample2

PubSampler1 (shared connection), 该连接的配置作为共享连接的设置

SubSampler1 (not shared connection), 会创建一个新的连接,因为使用的是非共享的连接

ThreadGroupSample3

PubSampler1 (not shared connection), 会创建一个新的连接,因为使用的是非共享的连接

SubSampler1 (shared connection), 该连接的配置作为共享连接的设置

SubSampler2 (shared connection), 使用在 SubSampler1 创建的连接,该 Sampler 中的配置将被忽略

3. Sub Sampler 支持订阅多个 Topic

现在 Sub Sampler 支持订阅多个主题,主题之间用逗号分隔

4. Sub可以控制接收消息并且生成一条测试记录的方式

如下图所示,“Sample on” 下拉列表框中允许用户指定产生一条测试记录的方式,缺省为 “elapsed with specified time(ms)”,意思为在指定的时间区间(单位为毫秒)生成一条测试记录,不管在该测试区间段里有没有收到消息;另外的一种方式是 “number of received messages”,该选项意味着当前虚拟用户只有在收到了指定数目的消息的时候才会生成一条测试记录。

5.Pub中topic的使用变成了针对单个虚拟用户

新版本的 Pub 实现中,用户指定了 topic 后,只会使用第一次建立连接的时候传入的 topic 的名字,而不管传入的是否是一个变量值。

mqtt服务器性能H3,运用 MQTT-JMeter 插件测试 MQTT 服务器性能相关推荐

  1. DICOM:基于JMeter+dcm4che2测试PACS服务器性能的解决方案(续篇)

    背景: 前一篇博文通过扩展JMeter的java请求,结合dcm4che2现有的工具包dcmsnd.bat实现了简单的测试DICOM服务器C-STORE SCP性能的尝试.由于借用了现有的dcmsnd ...

  2. DICOM:基于JMeter+dcm4che2测试PACS服务器性能的解决方案(前篇)

    背景: 目前对于传统WEB网站性能(压力/负载)的测试工具有很多,loadrunner.iperf.siege等,操作都比较简单,这里就不介绍了.然而对于医疗领域内的服务器,通常指的是DICOM服务器 ...

  3. 扫雷怎么测试电脑性能的软件,怎么用扫雷测试电脑的性能?

    2014-01-29 咋样用π来测试电脑的性能 简单点就是用优化大师里面的工具测试 高级点就用3dmark2005 再就是看内存和cpu,二手电脑内存最好是256m以上的, 不少朋友在新装电脑以后不能 ...

  4. 转载:运用MQTT-JMeter插件测试MQTT服务器性能

    今天我们介绍XMeter团队带来的新版MQTT-JMeter插件,您可以更为方便地添加MQTT连接.发布.订阅取样器,构造组合的应用场景,例如背景连接.多发少收.少发多收,计算消息转发时延等.利用该插 ...

  5. jmeter压力测试及服务器性能监控

    1.jmeter 下载 Apache JMeter - Download Apache JMeter 2.  下载完成之后进行解压. 下载之后得到ZIP文件 解压之后程序文件夹,jmeter为解压程序 ...

  6. 基于EasyDarwin开源流媒体服务器框架实现EasyNVR H5无插件直播流媒体服务器方案

    背景分析 在之前的一篇博客<web无插件播放RTSP摄像机方案,拒绝插件,拥抱H5!>中,描述了实现一套H5无插件直播方案的各个组件的参考建议,又在博客<EasyNVR H5流媒体服 ...

  7. undertow服务器分析_使用undertow构建和测试Websocket服务器

    undertow服务器分析 即将发布的JBoss Application Server版本将不再使用Tomcat作为集成的Web服务器,而是将其替换为undertow . undertow的体系结构基 ...

  8. 【Linux】云服务器部署网站后的ab压力测试,服务器网络接口io情况、进程cpu占用等有关情况查看

    压测 一.windows端压力测试工具 1.1 下载 1.2 安装 1.3 使用 二.Linux服务端监控 一.windows端压力测试工具 1.1 下载 主要使用ab(apache bench)工具 ...

  9. 电脑性能一目了然,教你用测试软件测试整机性能

    一台笔记本电脑或者是一台DIY台式电脑,都是由处理器.显卡.硬盘等配件构成,而每个配件都有自己的性能,性能是高是低我们可以进行单项测试.对于整机性能我们也可以对其进行测试,来看看它的真实性能到底如何. ...

最新文章

  1. Css 特殊或不常用属性
  2. 【CodeForces - 988C 】Equal Sums (思维,STLmap,STLset,tricks)
  3. python flask 上传下载 api_Flask 文件下载API
  4. SQL Server数据库快照
  5. maven jar包下载
  6. 事件库之Redis自己的事件模型-ae
  7. SpringMVC 异常的处理
  8. y电容如何选型_到底什么是安规电容?有什么作用?一文彻底请明白
  9. KEIL软件安装教程
  10. DEM数据如何生成高程点
  11. Android UI:使用矢量图,抛弃PNG
  12. 【图像压缩】多层超先验模型 《Coarse-to-Fine Hyper-Prior Modeling for Learned Image Compression》
  13. CapstoneCS5211|CS5211电路|CS5211中文规格书|CS5211设计eDP到LVDS转接板/转换器方案
  14. figma安装包_Figma软件下载|UI界面设计软件(Figma)下载 v3.0.4 官方版 - 比克尔下载...
  15. 慧荣SM2262EN跑RDT教程
  16. 杜比AC-3与DTS的音效对比 浅解
  17. 2018noip普及组初赛竞赛总结
  18. hdu4416——后缀自动机
  19. 微型计算机原理中jge,微机原理第三章课件.ppt
  20. super extend

热门文章

  1. 一切为了运营!如何从推广短信链接唤起 App?
  2. 如何做一个姿势正确的2B产品经理
  3. 双向多点路由重分布--如何防止路由环路以及次优路径
  4. 用友3.0谋局“新两化” 融合创新迸发新动能
  5. 敏捷软件开发实践-Sprint Setup Meeting
  6. Linux命令:ps,netstat,top
  7. 3D 音频技术产品介绍(1):Iosono the future of spatial audio
  8. list转为 数组[] 形式
  9. go build命令参数详解
  10. linux实用的脚本:xcall(同步执行命令)与xsync(同步文件目录)