一 简介
1.1 为什么使用分布式
当模拟并发请求较大或者脚本运行时间较长时,压力机会出现卡顿甚至报内存溢出。针对这个情况,JMeter 的解决方案是支持分布式压测,即将大量的模拟并发分配给多台压力机来满足这种大流量的并发请求场景。
1.2 分布式的原理
JMeter 分布式压测时,选择其中一台作为控制机(master),其余的机器做为负载机(slaves),执行时脚本,控制机会把脚本发送到每个负载机上,负载机获取到脚本就执行脚本(负载机只需要启动 jmeter-server.bat 或者 jmeter-server)。执行后,负载机回传执行结果给控制机,控制机进行汇总。
1.3 分布式注意事项
- 系统上的防火墙已关闭或打开了正确的端口
- 所有客户端都在同一子网中
- 确保 JMeter 可以访问服务器
- 确保在所有系统上使用相同版本的 JMeter 和 Java
- 为 RMI 设置了 SSL 或将其禁用
1.4 分布式环境搭建
本次使用 Windows 作为控制机,Linux 作为负载机搭建分布式环境,JMeter 分布式的搭建非常简单,主要步骤如下:
(1)修改控制机的 jmeter.properties,remote_hosts 为负载机的 IP 地址,多台机器用英文逗号隔开,端口默认为 1099,如果端口被占用可以自行修改,禁用 SSL(server.rmi.ssl.disable=true)。
(2)修改负载机的 jmeter.properties,禁用SSL(server.rmi.ssl.disable=true)。
(3)启动负载机的 jmeter-server ,进到负载机 JMeter 安装目录的 bin 目录下,执行
./jmeter-server -Djava.rmi.server.hostname=192.XX.XX.XX
192.XX.XX.XX 为负载机的 IP 地址,根据自己的实际情况修改,注意负载机的jmeter-server 不可突然停止,否则会报错
1.5 Linux环境具体搭建步骤(linux命令)
1.5.1配置jdk
1、安装jdk放到/usr/local下面
tar -zxvf jdk-8u221-linux-x64.tar.gz -C /usr/local
2、yum -y install vim-enhanced (如果有就不用安装)
3、 vim /etc/profile
可以看到这个文件的内容,profile文件有点类似于windows系统里面的环境变量的配置,
4、shift + g 定位到最后一行
5、这个时候按一下a或i键,进入编辑模式
写入下面内容
export JAVA_HOME=/usr/local/jdk1.8.0_391
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tool.jar
6、按Esc键 输入:wq 保存并退出
7、让配置文件生效: source /etc/profile
8、查看jdk成功
java -version
1.5.2 安装配置jmeter5.3
1、 将Jmeter安装包解压到当前目录:tar -zxvf apache-jmeter-5.3.tgz
2、在当前目录下创建存放脚本、报告、结果的目录,执行:mkdir testscript (脚本目录),mkdir testreport(报告目录),mkdir testresult(结果目录),mkdir testlogs(日志目录)
3、配置环境变量:vim /etc/profile ,在/etc/profile最后一行插入下面一段保存。
export JMETER_HOME=/home/jmeter/apache-jmeter-5.3 exportCLASSPATH=${JMETER_HOME}/lib/ext/ApacheJMeter_core.jar:${JMETER_HOME}/lib/jorphan.jar:${CLASSPATH}
export PATH=${JMETER_HOME}/bin:$PATH
4、按Esc键 输入:wq 保存并退出
5、让配置文件生效: source /etc/profile
6、检查是否成功:jmeter -v
1.5.3分布式部署
1、开启防火墙:systemctl start firewalld
关闭防火墙:systemctl stop firewalld
查看防火墙状态
firewall-cmd --state
2、下载netstat命令对应的软件包
yum install net-tools -y
3、查看防火墙状态
firewall-cmd --state
4、打开某一个端口
firewall-cmd --zone=public --add-port=1099/tcp --permanent
5、重启防火墙
firewall-cmd --reload
6、安装yum install net-tools
查看1099端口使用情况·
netstat -ntulp |grep 1099
二.远程执行 JMeter 脚本
2.1 远程启动单个负载机
在控制机打开 JMeter 脚本,点击运行-远程启动,会看到在配置文件 jmeter.properties 配置的 remote_hosts。选择一个 IP 地址点击,此机器上的 JMeter 会执行脚本并返回结果给控制机。
2.2 远程启动所有负载机
点击运行-远程启动所有,所有的负载机都会去执行脚本,并且返回结果给控制机,这样就可以进行分布式压测了。
远程启动负载机时需要注意几点:
1、确保负载机启动了 jmeter-server,没有启动会执行失败
2、没有必要将测试脚本复制到每一台机器,JMeter 控制机会将它发往每一台 JMeter 负载机
3、每一台 JMeter 负载机都执行相同的测试脚本,JMeter 不会在执行期间做负载均衡,每一台负载机都会完整地运行测试脚本
4、如果使用 csv 进行参数化,那么需要把参数文件在每台负载机上拷一份且路径需要设置成一样的,建议放到bin文件夹中
5、分布式测试中,通过远程启动负载机,默认查看结果树中的响应数据为空