jmeter分布式压测-实操技术归档
概念解析:单台机可以对目标机器产生的压力比较小,受限因素包括CPU,网络,IO等。利用多台机器向目标机器产生压力,模拟几万用户并发访问,可以施加较大压力进行测试。(存在异常情况)
一、前置文件
jdk安装包
▪win和linux都需要预先配置好java环境,并且程序版本需要一致。本次测试,我们实际使用的版本为【jdk-8u333】版本,实际使用情况良好,后续推荐可以继续使用此版本。
▪注意事项:1.win和linux是不同的安装包文件;
jmeter安装包
▪win和linux的安装包是同样的程序包,启动程序都在一个包里。要提前把需要用到的插件安装好,之后再打包分发到各个机器上。
▪注意事项:1.版本必须一致,插件必须一致。2.所有从机存放目录需一致,方便后续调用;
参数化文件
▪当需要用到不同的数据去进行测试时,例如用户信息等。比较方便的办法是使用参数化文件,如csv格式的文件,有多少台从机,就准备多少份文件,文件内的内容需要不相同,但是文件名需要一致,可以准备多个文件,用不同的名字进行区分,方便测试不同的端口调用。
二、准备工作
需要用到的程序:
▪1.jmeter程序本体; (修改脚本,分发脚本,主从机运行)
▪2.notepad++或类似的文本编辑器;(编辑配置文档,修改文件编码规则)
▪3.Excel表格编辑软件; (生成csv文件)
▪4.7z、rar等压缩解压软件; (对远程桌面的文件进行打包解包)
▪5.xhsell等远程连接linux软件; (连接linux主机)
▪6.PDR等windows远程桌面软件; (连接windows主机)
▪7.xftp等linux远程传输软件; (与linux主机之间远程传输文件)
需要测试的端口参数,详细的参数报文;
先在GUI单点测试中编辑好相应的jmeter测试脚本,并冒烟通过;
准备施压机器
▪实际操作过程中可使用【1+x】的模式搭建分布式压测机器,我们本次使用的模式为1(windows)+10(Linux)的搭建模式。
▪注意事项:1.所有机器的防火墙,需要提前关闭,因为有时候,主从机之间无法连接大部分都是防火墙的原因,提前关闭,可以减少很多不必要的麻烦;2.主从机,需要分配在一个子网下面,方便进行数据沟通。例如【192.168.111.xxx】
三、过程详情
1、linux-从机-部署过程……系统安装过程略
1、java环境配置
1.卸载原有jdk
获取到远程linux主机的IP地址后,使用xshell等工具远程连接,需要注意使用root用户登录。
连接主机后,首先查询java环境,因为部分linux主机安装后,自带java环境,但是该环境无法被此项目使用,需要卸载。
第一步:rpm查询java安装包名称
[root@localhost java]# rpm -qa | grep java
java-1.7.0-openjdk-headless-1.7.0.51-2.4.5.5.el7.x86_64
tzdata-java-2014b-1.el7.noarch
python-javapackages-3.4.1-5.el7.noarch
java-1.7.0-openjdk-1.7.0.51-2.4.5.5.el7.x86_64
javapackages-tools-3.4.1-5.el7.noarch
//使用下面三次查询
#rpm -qa |grep java
#rpm -qa |grep jdk
#rpm -qa |grep gcj
第二步:–查询安装包安装到系统的文件位置并显示文件状态
rpm -qs java-1.7.0-openjdk-1.7.0.51-2.4.5.5.el7.x86_64
第三步:rmp删除安装包
rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.51-2.4.5.5.el7.x86_64
rpm -e --nodeps tzdata-java-2014b-1.el7.noarch
rpm -e --nodeps python-javapackages-3.4.1-5.el7.noarch
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.51-2.4.5.5.el7.x86_64
rpm -e --nodeps javapackages-tools-3.4.1-5.el7.noarch
删除后使用rpm -qa | grep java
查询是否有残留文件
2.安装预定版本jdk
首先使用linux远程连接工具连接到linux系统,具体的访问地址,用户名和密码,提前获取。
连接到远程linux主机之后,在预定的路径新建名为【JAVA
】的目录,本次工程路径为/usr/local/java
mkdir /usr/local/java
然后通过远程文件传输工具,把java安装包上传到服务器
进行解包操作(包名以实际为准)
tar -zxvf jdk-8u181-linux-x64.tar.gz
解包之后可以删除对应的包(也可以留着)
rm -f jdk-8u181-linux-x64.tar.gz
配置环境变量
vim /etc/profile
#在文件末添加以下内容
export JAVA_HOME=/usr/local/java/jdk1.8.0_333 #jdk安装目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
:wq //保存并退出
刷新配置文件,使配置立即生效
source /etc/profile
检验java环境是否安装成功
java -version
如果没有提示错误,显示正确的java信息,则java环境安装成功
2、jmeter部署,环境配置
在预定的路径新建目录(本次项目指定路径为 /usr/local/jmeter)
mkdir /usr/local/jmeter
通过远程传输软件,上传jmeter包到服务器
进行解压
tar -zxvf apache-jmeter-5.4.3.tar.gz
配置环境变量,使jmeter生效
vim /etc/profile
#在文件末添加以下内容
export JMETER_HOME=/usr/local/jmeter/apache-jmeter-5.4.3 #jmeter安装路径
export CLASSPATH=${JMETER_HOME}/lib/ext/ApacheJMeter_core.jar:${JMETER_HOME}/lib/jorphan.jar:${CLASSPATH}
export PATH=${JMETER_HOME}/bin:$PATH
:wq #保存并退出
#刷新配置文件,使环境变量立即生效
source /etc/profile
检验jmeter环境是否配置完成
jmeter -v
出现jmeter的图样,则表示jmeter环境配置成功
下一步,对jmeter目录进行赋权
cd /usr/local/jmeter
sudo chmod -R 777 apache-jmeter-5.4.3/
进入jmeter目录内,检查配置的权限是否已完成
权限配置完成后,则jmeter部署完成
3、主机防火墙关闭
首先先看下防火墙状态
firewall-cmd --state //查看防火墙状态
running //表示防火墙运行中,需要进行关闭
关闭防火墙
systemctl stop firewalld.service //关闭防火墙
再次看下防火墙状态,确认已关闭
firewall-cmd --state //查看防火墙状态
not running //表示防火墙已停止运行
4、配置文件修改
下面对每台不同的远程机器进行配置文件修改,需要注意的是,文件内容,需要与机器地址对应,否则无法生效。
以下操作在windows下完成,使用准备好的文本编辑软件
1、修改bin目录下
jmeter.properties
server.rmi.ssl.disable=true //添加一行保证远程连接通
//端口在默认情况下无需修改,使用默认端口即可。
remote_hosts=172.31.255.84 //设置该项的地址为对应的本机地址,注:内网地址
2、修改bin目录下
jmeter-server
RMI_HOST_DEF=-Djava.rmi.server.hostname= 172.31.255.84
//ip地址位置,填写对应的机器地址信息,注:内网地址
将修改好的配置文件,上传至对应地址的服务器目录(./jmeter/bin)下,覆盖原文件。
后续每台机器按照此方法修改配置文件,并上传服务器覆盖原文件即可。
***注意事项:以上所有文件的编码类型需要修改为utf-8保存,否则运行会报错。 ***
5、启动jmeter-linux远程测试程序
准备工作做好之后就可以启动从机的压测程序了
cd /usr/local/jmeter/apache-jmeter-5.4.3/bin/
nohup ./jmeter-server &
#后台运行
#未出现报错,则启动成功
启动之后进行核验,进程是否已存在
ps -ef | grep jmeter-server
如看到3个进程在运行中,则从机的服务全部启动完毕。
2、windows-主机-部署过程……系统安装过程略
1、java环境配置
打开下载好的java环境安装包。注:与linux的安装包同一个版本。
选择安装路径,最好自选,方便后续配置环境变量。本次项目中使用的云主机,安装位置为:
c:\java c:java\javaxxx
安装完成后编辑系统环境变量
▪新建变量 JAVA_HOME
变量名:JAVA_HOME
变量值:C:\JAVA #电脑上JDK安装的绝对路径
▪如果存在 CLASSPATH
变量,选中点击 Edit(编辑)。如果没有,点击 New(新建)… 新建。
变量名:CLASSPATH
变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
▪修改Path
变量,增加两个变量,如果是win10以前的版本,中间有连接符不要忘记添加
%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin
编辑完成后,验证环境是否安装成功。
打开cmd,输入
java -version
#出现以下正确信息,则表示java环境部署完成,版本号需与Linux的版本一致
java version "1.8.0_291" //示例版本号
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
2、jmeter部署及插件安装
解压jmeter包到预定位置即可。
本次测试中需要用到的额外插件 3 Basic Graphs
,前置插件plugins-manager
(插件管理器,置于jmeter\lib\ext目录下)
插件安装完毕后,对jmeter进行打包,用做上传Linux主机的运行包。(此步需要先做)
3、配置文件修改
1、修改jmeter/bin目录下
jmeter.properties
server.rmi.ssl.disable=true //文件末尾添加一行保证远程连接通
//端口在默认情况下无需修改,使用默认端口即可。
remote_hosts=172.31.XXX.101,…………, 172.31.XXX.109 //此处的IP地址填写从机的地址,中间使用英文标点符号【,】进行分隔,不需要填写windows主机本机的地址。
找到mode=Standard
项,去掉【#】注释符号
mode=Standard
//该项设置影响从机返回的结果,response body的内容。如果不需要查看,可以不改
2、修改bin目录下`
jmeter.bat
找到如下位置
rem Collect the settings defined above
if not defined JMETER_COMPLETE_ARGS (
set ARGS=%JAVA9_OPTS% %DUMP% %HEAP% %VERBOSE_GC% %GC_ALGO% %DDRAW% %SYSTEM_PROPS% %JMETER_LANGUAGE% %RUN_IN_DOCKER%
) else (
set ARGS=
)
if "%JM_START%" == "start" (
set JM_START=start "Apache_JMeter"
)
%JM_START% "%JM_LAUNCH%" %ARGS% %JVM_ARGS% -jar "%JMETER_BIN%ApacheJMeter.jar" %JMETER_CMD_LINE_ARGS%
rem If the errorlevel is not zero, then display it and pause
添加注释部分内容,使文件修改如下
rem Collect the settings defined above
if not defined JMETER_COMPLETE_ARGS (
set rmi_host=-Djava.rmi.server.hostname=192.xxx.xxx.xxx
#IP地址位置,填写windows主机的ip地址,注:内网地址。
set ARGS=%JAVA9_OPTS% %DUMP% %HEAP% %VERBOSE_GC% %GC_ALGO% %DDRAW% %SYSTEM_PROPS% %JMETER_LANGUAGE%
%RUN_IN_DOCKER% %rmi_host% #添加了刚设置的参数
) else (
set ARGS=
)
if "%JM_START%" == "start" (
set JM_START=start "Apache_JMeter"
)
%JM_START% "%JM_LAUNCH%" %ARGS% %JVM_ARGS% -jar "%JMETER_BIN%ApacheJMeter.jar" %JMETER_CMD_LINE_ARGS%
rem If the errorlevel is not zero, then display it and pause
将修改好的配置文件,上传至windows主机目录./jmeter/bin
下,覆盖原文件。
4、主从机连接测试
当配置文件均修改完成之后,可以进行试验性连接,进行连接前,确认所有从机已启动完毕,jmeter服务均已就绪。
点击windows远程主机-jmeter界面-菜单栏-运行菜单,点击远程启动所有。如果没有报错,则所有从机启动无异常,再从结果树一栏进行查看,实际的请求结果是否与计划的数目相等,查看是否有异常情况。若无异常情况,无报错,则主从机连接均已完成。
5、远程参数化文件设置
关于参数化文件的使用,因为所有的线程发起端均在从机(Linux)上,所以,所有的参数化文件需要预先布置在从机,具体如下:
参数化文件调用可以使用绝对路径和相对路径两种模式,本次工程中使用的是相对路径,相对路径即参数化文件相对于运行脚本的路径地址,运行脚本的路径地址一般默认为./jmeter/bin/目录下,所以本次参数化文件的地址定义在同级目录中,参数化文件的上传地址即./jmeter/bin/。所有从机的参数化文件的文件名需做统一,例如qqqq.csv
jmeter详细设置:
▪添加用户定义变量菜单,添加变量,变量名自定义,变量值为当前目录。本次工程使用的变量名为path,最终结果为path
./
▪添加csv数据文件设置菜单,文件名一栏使用刚刚添加的变量${path}qqqq.csv
。变量名称栏,填写新的变量名,用来从参数化文件中循环取值。
▪在http请求中的合适位置填写定义的取值变量名调用csv参数化文件的值。
5、远程参数化文件测试
▪远程参数化文件设置好之后,在请求中的合适位置配置变量,调用参数化,然后执行所有的远程主机,之后对比结果树中的请求body,是否符合预期结果。
另附:纯linux主从布置
条件限制下,只能布置纯linux的版本,使用该方法。
从机配置方式不变。
主机配置修改如下:
取消修改jmeter.bat
文件
修改bin目录下 jmeter.server
在文件末尾添加如下内容:
RMI_HOST_DEF=-Djava.rmi.server.hostname=192.168.xxx.xxx //此处填写主机内网IP地址
•其余配置修改不变
▪启动方式为主机命令行启动
jmeter -n -t /usr/local/jmeter/xxxx.jmx -l /usr/local/jmeter/xxxx.jtl
//jmeter 脚本路径 执行结果日志路径
//无报告模式
jmeter -n -t /usr/local/jmeter/xxxx.jmx -r -l /usr/local/jmeter/xxxx.jtl -e -o /usr/local/jmeter/xxxx
//jmeter 脚本路径 执行结果日志路径 生成报告路径
//生成报告模式
如有不足,欢迎指出。