用JMeter测试kuiper性能

前言

准备工作

有一台ubuntu系统的计算机
已经安装了kuiper,mosquitto

本文内容概述

安装jdk,添加环境变量,安装jemeter,添加环境变量,下载添加插件,新建jmeter项目,开始测试,开始实验。
第3,4个实验待完成

参考连接

  • jmeter重要教程:https://www.jianshu.com/p/244b4b86dd19
  • jmater:https://www.jianshu.com/p/3205b62a5091
  • 阿里云jmeter重要教程:https://help.aliyun.com/document_detail/143479.html
    包括插件下载地址,jmeter结构树中各个参数选项解释

jmeter安装

jmeter依靠java,需要先安装jdk

安装jdk

https://www.jianshu.com/p/dfce73d80ffb
https://blog.csdn.net/baidu_38172402/article/details/80747916
官网下载,安装,并添加环境变量,我安装的是jdk13

安装jmeter

官网下载,安装,并添加环境变量,我安装的是最新版5.2.1

  1. 官网下载zip文件,解压
  2. 移动到/usr/local
  3. 添加到环境变量:
# 命令框中输入以下指令打开文件以修改环境变量
vi /etc/profile

#在末尾添加两行:
# 添加方法是:复制这一个换行符加下面两行,光标移动到末尾,用鼠标右击选择粘贴,按键盘esc键,输入":",再输入wq
export JMETER=/usr/local/apache-jmeter-5.2.1
export PATH=$JMETER/bin:$PATH

# 应用修改
sudo vim ~/.bashrc

## 方法2
# 打开编辑
sudo gedit /etc/profile
# 应用
source /etc/profile

安装jmeter的mqtt插件

教程:https://help.aliyun.com/document_detail/143479.html
下载移动到jmeter安装目录即可
点我下载
移动到 JMeter 安装目录的 lib/ext/
创建快捷方式

sudo gedit ~/.local/share/applications/apache_jmeter.desktop

这里我创建快捷方式失败了,不过快捷方式不重要
在这里插入图片描述

测试

https://www.jianshu.com/p/244b4b86dd19

此处用到教程:https://help.aliyun.com/document_detail/143479.html

测试流程

在这里插入图片描述
如图所示,测试树的结构为:

test
    thread group #设置线程数,如100,里面有个loop count参数,设置为10会报错
        once only controller 
            csv data set config #加载csv数据,可以在csv文件中设置消息内容,设备id等动态数据
            mqtt connect #连接,仅连接一次
        loop controller #设置循环次数,如100
            mqtt pub sampler #多次发送数据,
        once only controller
            mqtt disconnect #关闭连接
     view results tree # 查看状态,绿色代表正常

问题

  1. 如果将线程数目设置的过多,运行过程中会报错,kuiper收不到消息,这是没有设置mqtt disconnect导致的同时连接数目过多,测试大约2000个就不行了。
    ----------解决方法:记得加上mqtt disconnect
  2. 按照上图设置结构,发现还是有一部分数据漏发,不知道原因和解决方法。猜测数据遗漏是正常的。

对比试验

1. 寻找kuiper最大接收数

对线程数,循环次数分别取10,100,500,1000,进行16次实验,统计kuiper每10秒收到的消息,从而得到收到的总消息数和收到的速度,
不过这个速度好像和kuiper无关,而是和jmeter相关,当线程多的时候jmeter会花费较多时间发送消息,从而影响kuiper收到消息的速度。

环境变量相同

发送的消息相同
主题都相同

结果如下:

循环次数\线程数 1 10 100 500 1000 5000
10 10 96 1000 4978 9947
100 97 939 9744 49222 96650
500 499 4324 47337 213163 107465+352160
1000 1000 9209 78904+17226 3次,459k 3次,899k 12次,2159K
5000 11次,1124K

a1=52583+343972+62830=459,385
a2=167k+251k+481k=899,000
a3=447+159177+93038+134747+85014+128042+159009+139228+69063+155605+120659=1124K

表格说明:“78904+17226”表示是两次接收得到的;“3次,889”表示kuiper通过3次(每次10s)接收到了890K条数据,每次接收到的具体值由a1 a2 a3记录。

(1,100):
在这里插入图片描述
1线程,100循环的漏掉一部分消息,jmeter提示:

  • jmeter提示:server:null--------这个有时回出现,不知道意思
  • info:disconnected-------出现这个代表漏消息了

10线程,100循环的漏掉了很多信息,发送的消息有有三种结果

  • jmeter提示:server:连接被对方重设------这可能是因为线程结束的时候发送了点开连接的请求“mqtt disconnect”
  • jmeter提示:server:null--------这个有时会出现,不知道意思
  • info:disconnected-------出现这个代表漏消息了
    在这里插入图片描述

1000,5000

结论:

  • 表中得到两个结果:收到的总消息数和收到的速度。
  • 收到的总消息数不稳定,和线程数,循环次数都有关,当线程数过多或循环数过多时,出现很大的消息遗漏,如(5000,1000)(1000,5000),但是也有可能是实验数据错误或者偶然误差。
  • (5000,1000)实验 :线程数有5000个,同时连接的数目过多,所以有很大一部分数据丢失,这印证了上面说的“如果不关闭连接,而且线程数过多,jmeter会报错”
  • kuiper每10s收到数量最大是 480K,推测最大接收处理速度48K/s。
  • 从(1000,5000)实验看出:jmeter发消息变慢,影响了kuiper收消息速度,但也可能是kuiper处理慢。
    不清楚mqtt协议的原理:jmeter会等kuiper处理完再发消息,还是先发到服务器再说?

实验改进

可以改写kuiper的规则,如统计过去10秒内----每1秒内收到的消息数,最多一秒能收到的消息数(峰值速度)。
这样可以免去人工统计峰值速度。

2. 稳定10K条每秒测试

在上一个实验的基础上稍加改进jmeter项目:

  1. 线程数设置为1000;
  2. loop controller设为死循环;
  3. 在mqtt pub sampler 中增加延时:100ms
    这样,每一秒钟会有1000个线程循环pub10次,一共每秒10K次,每10s100K次
    结果图:
    在这里插入图片描述
    结果较好。

3. 资源占用测试

测试结果

windows:

在jmeter已经停止发送消息,kuiper停止以后,电脑的cpu占用率仍然很高。
而且内存虚高:明明没有几个进程占用内存,但是已使用93%
windows任务管理器:
在这里插入图片描述
退出jmeter和kuiper以后,cpu占用减小很多。内存仍然占用较大

虚拟机端:

pass
具体怎么看虚拟机上的资源占用情况还不知道。

4. 消息处理正确写测试

利用csv文件动态发送消息,判断kuiper对消息处理的准确性,我猜准确性是100%
但是这个实验是后面编写kuiper流规则的基础,所以要做一下。

发布了25 篇原创文章 · 获赞 0 · 访问量 426

猜你喜欢

转载自blog.csdn.net/longzu233/article/details/104687404
今日推荐