JMeter 分布式调度压测部署

我们遇到jmeter被假压死了,这里有2个原因,一是jmeter原本是java写的,heap受硬件限制需要调优,二是单机无法分解超大并发比如100万+并发压测,因此,我们分二部走,首先我们需要进行jmeter分布式部署和调配,二是我们需要对每台执行机进行深度jmeter jvm调优,掠尽所有执行及的硬件和网络资源

 

首先我们来看如何进行jmeter分布式部署和配置

先杀个原理图

 

 

 

处理过程:

一:调度机master启动以后,会拷贝本地的jmx文件分发到远程的slave机器上;

二:slave机器拿到脚本以后启动命令行模式去执行脚本,对于每台slave机器拿到的脚本都是一样的,所以如果jmx脚本为50个线程跑3分钟,那么实际并发就是50*3=150个线程并发跑3分钟;

三:执行时,slave会把执行获得的数据结果传给master机器,master机器会收集所有slave机器的信息并汇总,这样master机器上就存在一份所有slave机器汇总的数据结果。

 

注意事项:

一:我们注意到master机器启动后会拷贝jmx文件到slave机器,所以我们不需要在每台slave机器上也上传一份jmx,只需要在master机器上上传一份jmx脚本即可。

二:参数化文件:如果使用csv进行参数化,那么需要把参数文件在每台slave上拷一份且路径需要设置成一样的。

三:调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave回传回来的测试数据,所以mater自身会有消耗,所以建议单独用一台机器作为master。

四:保证每台机器的jmeter版本和插件版本相同,避免造成一些意外问题。

五:分布式测试总样本数 = 线程数 * 循环次数 * 执行机总数, 样本计数逻辑为:执行机slave执行的测试脚本是由调度机master分发的,故每台执行机执行的测试脚本都是相同的,故而性能测试总样 本数 = 测试脚本样本数 * 执行机总数,而测试脚本样本数为线程数 * 循环次数

 

这个图说明的是要一台控制机,然后由这台控制机发压测脚本到每台远程执行机,然后由控制机收集执行机结果

1、配置主机器

其实很简单(不过配置控制机和执行机前,先在每台物理机上配置好jdk和jmeter)

 配置bin/jmeter.properties,,端口最好统一使用2099 或者7890,,remote_hosts= 配置主机ip:port,, 从机器ip:port

 

 

2.从机器配置

修改bin/jmeter.properties

 

 

 

3.当从主机的界面上可以看到这样的remote信息,说明配置已经成功

 

 

 

4.但是要想能正常跑起来还不够,,主、从每台机器需要启动bin/jmeter-server 没有任何报错,针对jemter-server 需要做如下的改动,,然后启动 ./jmeter-server (linux 模式)

或者直接命令行加参数的方式启动:./jmeter-server -Djava.rmi.server.hostname=192.168.1.34(绑定从机ip)

 

 

 

注意,主从机器上都需要启动,jmeter-server

 

5.运行的时候还是会报下面的错, 

 

 因为remote 需要配置加密文件,,解决方法两个,

1. jmeter.properties  修改配置 server.rmi.ssl.disable=false 为true 直接关闭加密的功能,主从都要改动

 

  2.生成加密文件

,如图所示,双击create-rmi-keystore.bat

 

 

 根据提示一直填下去,遇到yes与No就直接填:Y  然后回车就ok了,要注意:生成的rmi_keystore.jks复制到每一台执行物理的jmeter bin目录下去

然后控制机的再启动 jmeter-server.bat

 

 

 这样配置就全部完成了,我们来试一下:

1.我们先来在16从机器上做一个实验,2个虚拟用户,看看是否可以成功

 

16机器上的执行状态:

 

主机器上的,结果

 

 

 

 这样就可以明显看到远程控制在16上执行成功了。

2.这次我们再来主从都执行一边。设置2个虚拟用户,1秒钟内发完,循环1次,,一台主机+3台从机器,,分布式测试总样本数 = 线程数 * 循环次数;那总的并发就是2*1*4=8;看结果成功了。✌

 

 

 

 

posted @ 2019-07-01 14:38  sucre_tan  阅读(375)  评论(0编辑  收藏  举报