文章目录
前言
准备工作
有一台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
- 官网下载zip文件,解压
- 移动到/usr/local
- 添加到环境变量:
# 命令框中输入以下指令打开文件以修改环境变量
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
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 # 查看状态,绿色代表正常
问题
- 如果将线程数目设置的过多,运行过程中会报错,kuiper收不到消息,这是没有设置mqtt disconnect导致的同时连接数目过多,测试大约2000个就不行了。
----------解决方法:记得加上mqtt disconnect - 按照上图设置结构,发现还是有一部分数据漏发,不知道原因和解决方法。猜测数据遗漏是正常的。
对比试验
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-------出现这个代表漏消息了
结论:
- 表中得到两个结果:收到的总消息数和收到的速度。
- 收到的总消息数不稳定,和线程数,循环次数都有关,当线程数过多或循环数过多时,出现很大的消息遗漏,如(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项目:
- 线程数设置为1000;
- loop controller设为死循环;
- 在mqtt pub sampler 中增加延时:100ms
这样,每一秒钟会有1000个线程循环pub10次,一共每秒10K次,每10s100K次
结果图:
结果较好。
3. 资源占用测试
测试结果
windows:
在jmeter已经停止发送消息,kuiper停止以后,电脑的cpu占用率仍然很高。
而且内存虚高:明明没有几个进程占用内存,但是已使用93%
windows任务管理器:
退出jmeter和kuiper以后,cpu占用减小很多。内存仍然占用较大
虚拟机端:
pass
具体怎么看虚拟机上的资源占用情况还不知道。
4. 消息处理正确写测试
利用csv文件动态发送消息,判断kuiper对消息处理的准确性,我猜准确性是100%
但是这个实验是后面编写kuiper流规则的基础,所以要做一下。