目的:通过多台机器同时运行 性能压测 脚本,模拟更好的并发压力
简单点:就是一个人(控制机controler/调度机 master)做一个项目的时候,压力有点大,会导致结果不理想,这时候找几个人(执行机slaver)一起做,平均分配工作量 ,控制机只需要设置好需求,通知执行时间,最后看结果就行,其他都不用做。
master会在本地编辑好jmx压测脚本,执行时,master将jmx脚本发送至slave上,slaver执行时不需要启动jmeter,只需要把jmeter-sever.bat文件打开以非GUI形式执行;
slave执行完毕后将结果回传给master,并由master进行结果的汇总
1.多个独立环境,运行jmeter
192.168.120.9 --- 运行jmeter,控制机
192.168.1.174 --- 运行jmeter-server 作为执行机
192.168.1.175--- 运行jmeter-server作为执行机
2.执行机 环境搭建
2.1 环境设置
注意:控制机和执行机需要一致的地方
- Jmeter版本一致
- JDK版本一致
- Jmeter插件一致
- Jmeter脚本中文件路径要一致(特别注意csv路径,建议csv路径使用相对路径,放在脚本的同级目录)
关于分布式环境计数重复问题导致程序报错 解决方案:Jmeter脚本添加csv文件控制,不同的SLAVE环境下存放不同的csv文件即可使用CSV+计数器控制不同Slave的重复问题。
- 同一局域网,防火墙要开放端口
保持一致性的方法:直接压缩本地Jmeter包,然后上传到各个执行机进行解压
2.2 修改jmeter.properties
进入配置文件目录下
jmeter4.X之后controller机连接slave机,多了SSL身份验证环节,不想使用SSL,也可以进行关闭SLL,通过修改jmeter.properties(关闭RMI)
内网压测禁用SSL,外网需要启动SSL,进行slave机和controller机身份验证
server.rmi.ssl.disable=true
命令行比较难找,如果可以直接操作电脑文件,可以直接在 jmeter.properties修改比较方便
3. 控制机修改jmeter.properties
修改配置文件jmeter.properties
设置要连接的执行机
4.密匙传给执行机
控制机生成密匙-执行机(负载机)授权-分布式才能正常实现
1).接下来因为jmeter4.0版本及以上时,为了安全 分布式压测需要一个密匙才能正常实现
2).打开控制机的bin目录运行create-rmi-keystore.bat
复制下面的指令
keytool -genkey -keyalg RSA -alias rmi -keystore rmi_keystore.jks -storepass changeit -validity 7 -keysize 2048
3).找到jdk并进入jdk\bin目录
mac:
/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home/bin
输入 b中复制的执行,且输入信息后,报错:keytool 错误: java.io.FileNotFoundException: rmi_keystore.jks (Permission denied)
权限的问题,增加sudo
4).完成后,会生成一个jks文件
5).然后将这个文件,复制粘贴给所有执行机中的jmeter\bin目录下面(Windows、linux同理)
5. 运行
5.1 执行机启动
每个执行机都要启动
./bin/jmeter-server -Djava.rmi.server.hostname::192.168.1.174
./bin/jmeter-server -Djava.rmi.server.hostname::192.168.1.175
如果提示权限问题,赋予权限chomd -R 777 xxxx
5.2 控制机启动
1) GUI模式
远程启动,选择执行机,如果都要执行,则选择“远程启动所有”
2)非GUI模式
启动salve机执行脚本,并返回数据,同时生成聚合报告文件、日志等数据文件
jmeter -n -t 脚本名称.jmx -R 192.168.38.49,192.168.38.52,192.168.38.20 -l logfile.jtl -o testReport -j log -r -e
注意点:
如果执行 6000个线程数 :
- 3 个执行机的话,线程数就设置2000;
- 2 个执行机的话,线程数就设置 3000;
- 1 个执行机的话,线程数就设置 6000.
更多问题