一,Jmeter分布式部署测试--远程连接多台电脑做性能测试
什么是分布式测试:分布式测试是指通过局域网和Internet,把分布于不同地点、独立完成特定功能的测试计算机连接起来,以达到测试资源共享、分散操作、集中管理、协同工作、负载均衡、测试过程监控等目的的计算机网络测试
在使用Jmeter进行接口的性能测试时候,由于JMeter是java应用,对CPU和内存消耗比较大,所以当需要模拟数以万计的并发用户时,使用单台机器模拟所有的并发用户就会出现电脑卡死等现象,或者会引起java内存溢出的错误。为了Jmeter工具提供了更大的负载能力,这个时候就可以使用Jmeter提供分布式来控制多台电脑进行压力测试
二,分布式的原理
1,jmeter分布式测试时,选择其中一台为控制机(Controller),一般都是我们自己的电脑,其他机器作为代理机器(Agent),一般可以用服务器做代理
2,执行时,Controller会把脚本发送到每台Agent上,Agent拿到脚本后开始执行,Agent执行时不需要启动jmeter,只需要把jmete-server文件打开就行,他是通过命令行来执行的
3,执行后,Agent会把结果回传给Controller,Controller会收集所有Agent的信息并汇总
其他的原理解释:
- 选择其中一台作为Master机(调度机),其他机器作为Slave机(执行机)
- 执行时,Master机会把脚本发送到每台Slave机上,Slave机拿到脚本后就开始执行,不需要启动GUI
- 执行完成后,Slave机会把结果回传给Master机,Master机会收集所有Slave机的信息,并汇总
三、分布式配置
前提条件:
- Slave机器的jdk版本需要跟Master机器的jdk版本保持一致
- Slave机器的Jmeter版本以及插件需要跟Master机器保持一致,操作方法是直接将Master的Jmeter安装目录打包后解压到Slave机器上
- Slave机器的网络需要跟Master机器的网络保持在同一个局域网,可以ping通
1.Master机器配置
在Jmeter的%JMETER_HOME%in目录下,使用文本编辑工具打开jmeter.properties配置文件,配置以下参数
第一个ip是本地的ip,第二个ip是slave机器上的ip
配置完成后重启Jmeter
2.Slave机器配置
在Jmeter的%JMETER_HOME%/bin目录下,使用文本编辑工具打开jmeter.properties配置文件,配置以下参数
如果是linux机器上,则要给bin目录赋予执行的权限:chmod +x -R bin/,还要注意防火前是否开放了1099端口
3,启动salve的jmeter, ./jmeter-server
解决办法:./jmeter-server -Djava.rmi.server.hostname=192.168.3.180(这是我的ip)
提示缺少jsk文件
不管是负载机还是控制机(如果控制机也作为负载机),执行jmeter-server.bat(linux下执行jmeter-server,另外:linux下检查是否启动成功:ps -ef | grep jmeter-server),报错,
是因为从JMeter 4.0开始,RMI的默认传输机制将使用ssl。SSL需要密钥和证书才能工作,不使用ssl将存在安全漏洞
解决办法:在控制机bin目录下,点击:create-rmi-keystore.bat
根据提示一直填下去,遇到Yes与No就直接填y,然后回车就ok了
回车后会在bin目录生成文件:rmi_keystore.jks
点击:点击jmeter-server.bat, 启动RMI注册表
复制控制机生成的rmi_keystore.jks到每一台负载机jmeter的bin目录下
再次启动就正常了:
./jmeter-server -Djava.rmi.server.hostname=192.168.3.180(这是我的ip)
四,运行
在控制机查看是否配置成功,需要查重新启动jmeter
我就只使用了一个savle(192.168.3.180)
启动以后从slave上可以看到两行日志:
注意:如果客户端提示找不到系统文件之类的或者提示java.rmi.ConnectIOException: non-JRMP server at remote endpoint,就需要在master和salve的jmete.properies中打开找到#server.rmi.ssl.disable=false,给变更成server.rmi.ssl.disable=true(注意是控制器和压力机都要更改)。每次变更后都要重新打开jmeter
我本地的机器没有作为负载机,所有没有消耗任何的资源
这里要注意的是:
1,控制机和负载机的jdk,jmeter版本都必须一致
2,控制机用的插件,负载机上也必须有(可以去ext目录下对比)
3,脚本不需要传递到负载机,但是如果有csv等数据文件,就必须传到负载机上,而且路径要写负载机的路径
4,负载机只能是一种,要么是windowins要么是liunx,我这里是linux