jmeter分布式环境搭建

jmeter分布式环境搭建

在性能测试过程中经常会用到分布式环境压测,以下是分布式环境搭建的方法和介绍。

Jmeter运行方式:GUI和非GUI

GUI:在Windows系统上运行,图形化界面,方便查看测试结果,但是消耗压力机资源较高,容易卡死,有并发限制。
非GUI:通过命令行运行,无图形化界面,不方便查看测试结果,但是消耗压力机资源较低,可以支持较大并发。

GUI、非GUI遇到的问题

Jmeter是基于java程序运行的,在windows上使用Jmeter进行性能测试时,非常耗费客户机的CPU和内存,如果并发数稍微大一点(比如100、1000…并发),单台电脑的配置经常无法支持,很容易卡死,即使不卡死也会使电脑运行很慢,导致我们没办法进行其它操作。
通过cmd命令行,或者是在Linux上使用Jmeter进行性能测试时,能够大大缩减所需要的系统资源;但是需要将Jmeter脚本上传到Linux上使用命令行方式运行,如果脚本经常改动就要频繁上传;测试完成后要把结果数据下载到本地GUI环境中查看,当结果文件较大时,下载要花费大量时间,总是有很多不方便。

如何解决?

Jmeter的分布式控制,说的通俗一点,就是指远程启动功能,具体原理如下图: (来自官网)
在这里插入图片描述
在这里插入图片描述
1、客户端机器(window系统或者Linux服务器)作为一个控制器Master,控制多台slave机器的操作。
说明:调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave回传回来的测试数据,所以mater自身会有消耗,所以建议单独用一台机器作为mater,mater不参与测试只负责发送指令。
2、Master和slave机器上最好装有相同版本的jdk和Jmeter,并配置好环境变量,安装和配置方法跟windows环境类似。
3、Master通过GUI界面或者非GUI模式启动slave机器,将Jmeter压测脚本发送给每台启动的slave,slave获得脚本后开始执行。slave本地不需预先存储脚本,但是需要有脚本中的依赖文件(如csv文件等)。
4、各台slave执行完成后,将结果传回给Master,Master收集后整合显示出来。

Jmeter分布式部署流程

1、下载Jmeter文件
Linux安装Jmeter,官网下载最新的二进制安装.tgz格式的包
2、上传文件,解压
SSH连接远程Linux服务器,上传文件后,解压,tar命令解压 tar -zxvf apache-Jmeter-5.3.tgz
3、设置环境变量
添加环境变量,修改系统变量:vi ~/.bash_profile,

export JMETER_HOME= /home/jmeter/apache-jmeter-5.4.1 
export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJmeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$JMETER_HOME/lib/logkit-2.0.jar:$CLASSPATH 
export PATH=$JMETER_HOME/bin:$PATH

 source ~/.bash_profile,让变量生效
 设置完成后,执行Jmeter -v,如下图,安装完成
在这里插入图片描述
4、配置Jmeter相关文件(需要修改Master和slave机的配置)

A、Master控制机修改(以Windows为例)
Jmeter.properties修改
1、 查看Linux执行机的ip地址,然后设置remote_hosts=执行机1:端口号,执行机2:端口号
2、修改server_port=1099 执行启动远程连接的端口号 ,remote_hosts配置成一致的端口号
3、server.rmi.ssl.disable=false 改为 server.rmi.ssl.disable=true
4、server.rmi.localport=4000 执行机Jmeter_server启动显示的端口启动的端口号
5、查找到mode=Standard 项,将其前边的注释去掉(解决Jmeter进行分布式测试,远程机器来运行脚本,在察看结果树中的响应数据项为空白)
Jmeter-server.sh修改
RMI_HOST_DEF=-Djava.rmi.server.hostname=127.0.0.1 地址改成本机的ip地址,执行和控制机都需要改
Jmeter.bat
新增set rmi_host=-Djava.rmi.server.hostname=本机ip
修改set ARGS=%DUMP% %HEAP% %NEW% %SURVIVOR% %TENURING% %PERM% %DDRAW% %rmi_host%
B、slave机配置修改(以Linux为例)
Jmeter.properties修改
1、修改server_port=1099 表示控制机要远程连接通信的端口号,即Master配置文件Jmeter.properties的remote_hosts配置的端口号
2、server.rmi.localport=4000 执行机Jmeter_server启动显示的端口启动的端口号
3、server.rmi.ssl.disable=false 改为 server.rmi.ssl.disable=true
Jmeter-server.sh修改
RMI_HOST_DEF=-Djava.rmi.server.hostname=127.0.0.1 地址改成本机的ip地址,执行和控制机都需要改。

备注:
如果Linux服务器自身性能优越,可以单台Linux部署多个Jmeter进行测试,具体操作如下:
1、 复制Jmeter安装包,
2、 修改Jmeter.properties文件的端口号 server_port=1099和server.rmi.localport=4000,更改为未被占用的端口号
3、 然后修改Jmeter-server文件的启动端口号,1039即自己指定的端口号,和Jmeter.properties的server_port一致。

RMI_HOST_DEF=-Djava.rmi.server.hostname=127.0.0.1  
${DIRNAME}/Jmeter ${RMI_HOST_DEF} -Dserver_port=${SERVER_PORT:-1039} -s -j Jmeter-server.log "$@" &1039为自己指定的端口号)

4、完成后./Jmeter-server 启动服务
5、操作Master发起指令,进行测试
6、测试完成后,Master收集测试数据,并生成测试报告

如需脚本配置的方式可参考如下:

Jmeter.properties修改
1、查看Linux执行机的ip地址,然后设置remote_hosts= 1控制机:端口号, 2执行机:端口号(Master和slave机都这么修改)
2、修改server_port=1099 执行启动远程连接的端口号 ,remote_hosts配置成一致的端口号
3、server.rmi.ssl.disable=false 改为 server.rmi.ssl.disable=true

Jmeterserver.sh 脚本配置
1、 新建一个Jmeterserver.sh 文件,放在脚本执行的上级路径或jmeter安装路径
2、 脚本配置参数如下:

#!/bin/sh
APP_HOME=/home/tools/apache-jmeter-5.2.1/bin   #jmeter安装路径 (保证控制机和执行机的安装路径一致)
JAR_FILE=$APP_HOME/jmeter-server #访问的是jmeter bin目录下的jmeter-server
AGS_PAR=-Djava.rmi.server.hostname=127.0.0.1 #本机ip地址
APP_NAME=jmeter-server #访问的是新建文件中的jmeter-server服务地址
LOG_PATH=/home/tools/logs/jmeterserver.log #执行jmeter-server生的log文件
pid=0
start(){
	checkpid
	if [ ! -n "$pid" ]; then
		nohup sh $JAR_FILE $AGS_PAR > /home/tools/logs/jmeterserver.log 2>&1 &   
		 #替换成LOG_PATH,生成log的文件路径
                echo "---------------------------------"
		echo "启动完成,按CTRL+C退出日志界面即可>>>>>"
		echo "---------------------------------"
		sleep 2s
		tail -f $LOG_PATH
	else
		echo "$APP_NAME is runing PID: $pid"	
	fi
}


status(){
	checkpid
	if [ ! -n "$pid" ]; then
		echo "$APP_NAME not runing"
	else
		echo "$APP_NAME runing PID: $pid"
	fi 
}

checkpid(){
	pid=`ps -ef |grep $APP_NAME |grep -v grep |awk '{print $2}'`
}

stop(){
	checkpid
	if [ ! -n "$pid" ]; then
		echo "$APP_NAME not runing"
	else
		echo "$APP_NAME stop..."
		kill -9 $pid
	fi 
}

restart(){
	stop 
	sleep 1s
	start
}

case $1 in  
	start) start;;  
	stop)  stop;; 
	restart)  restart;;  
	status)  status;;	
	*)  echo "require start|stop|restart|status"  ;;  
esac

脚本的执行命令为:sh /目录/jmeterserver.sh restart

PS:在测试过程如中断压测执行脚本,下次压测前需要重启服务(执行jmeterserver.sh),否则会出现脚本执行报错,报错异常如下:
Connection refused to host: 127.0.0.1; nested exception is:
java.net.ConnectException: Connection refused (Connection refused)
Failed to configure 127.0.0.1:1099

The following remote engines have not started:[127.0.0.1:1099, 127.0.0.2:1099]
(出现报错也可以手动在bin目录下执行jmeter-server.sh &)

其他说明
  1、参数文件:如果使用csv进行参数化,那么需要把参数文件在每台slave上拷一份且路径需要设置成一样的。
  2、每台机器上安装的Jmeter版本和插件最好都一致,否则会出一些意外的问题。

Jmeter非GUI运行时动态参数设置相关的参数化

Jmeter的测试计划在运行Sampler之前会先加载运行属(Jmeter.properties,system.properties等)文件,而且Jmeter还提供了方法可以动态修改属性,在命令行中使用【-J】 来指定Jmeter Properties,脚本里面使用__P() 函数(工具-函数助手对话框中查找)来获取命令中指定的属性值。
在这里插入图片描述
配置说明:
1、并发数设置为KaTeX parse error: Expected group after '_' at position 2: {_̲_P(threads,1)},…{__P(cycles,1)},其中后面的1是默认值,作用是执行一次来调试脚本,这是__P函数的功能(虽然我一直都是用GUI模式来调试脚本的)
2、执行时长设置为${__P(duration,60)},默认1分钟(60s),如果同时设置了循环次数和执行时长,那么满足其中一个条件脚本就会停止。 执行次数=-1时即表示Forever
如下图:
在这里插入图片描述

Jmeter参数说明

在这里插入图片描述

Jmeter测试报告及详解

1、生成HTML测试报告的两种方式
A、利用已有的.jtl文件生成测试报告,
进入jmeter的bin目录下,输入如下命令:
jmeter -g test.jtl -o /path
在这里插入图片描述在这里插入图片描述
PS:如果是在Windows环境命令行运行,必须指定生成的HTML文件存放文件夹,否则会报错;如果是linux环境,如指定路径下不存在该文件夹,会生成对应的文件夹存放报告文件!
B、无.jtl文件生成测试报告
如果还未生成.jtl文件,则可以通过如下命令,一次性完成测试执行和生成HTML可视化报告的操作,进入jmeter的bin目录下,输入如下命令:

jmeter -n -t test.jmx -l test.jtl -e -o /path
-n:以非GUI形式运行Jmeter
-t:source.jmx 脚本路径
-l:result.jtl 运行结果保存路径(.jtl),此文件必须不存在
-e:在脚本运行结束后生成html报告
-o:用于存放html报告的目录

本地Windows环境执行截图如下:
在这里插入图片描述
执行完毕后,用浏览器打开生成的文件目录下的index文件,效果展示如下:
在这里插入图片描述

测试报告图表信息详解

测试报告分为两部分,Dashboard和Charts,下面分开解析。
1、Dashboard(概览仪表盘)
 Test and Report informations
在这里插入图片描述
 APDEX (应用性能指标)
在这里插入图片描述
 Requests Summary
在这里插入图片描述
2、Charts(详细信息图表)
PS:由于详细信息图表有点多,这里我挑几个性能测试过程中比较关键的图表解析!
Over Time
 Response Times Over Time(脚本运行期间的响应时间变化趋势图)
说明:可以根据响应时间和变化和TPS以及模拟的并发数变化,判断性能拐点的范围。
在这里插入图片描述
 Response Time Percentiles Over Time (successful responses)
说明:脚本运行期间成功的请求响应时间百分比分布图,可以理解为聚合报告里面不同%的数据,图形化展示的结果。
在这里插入图片描述
 Bytes Throughput Over Time(脚本运行期间的吞吐量变化趋势图)
说明:在容量规划、可用性测试和大文件上传下载场景中,吞吐量是很重要的一个监控和分析指标。
在这里插入图片描述
 Latencies Over Time(脚本运行期间的响应延时变化趋势图)
说明:在高并发场景或者强业务强数据一致性场景,延时是个很严重的影响因素。
在这里插入图片描述
Throughput
 Transactions Per Second(每秒事务数)
说明:每秒事务数,即TPS,是性能测试中很重要的一个指标,它是用来衡量系统处理能力的一个重要指标。
在这里插入图片描述
Response Times
 Response Time Percentiles(响应时间百分比分布曲线图)
说明:即响应时间在某个范围内的请求在所有请求数中所占的比率,相比于平均响应时间,这个值更适合用来衡量系统的稳定性。
在这里插入图片描述
 Time Vs Threads(平均响应时间和线程数的对应变化曲线)
说明:可以通过这个对应的变化曲线来作为确定性能拐点的一个参考值。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值