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;看结果成功了。✌