需求
- 单台负载机存在瓶颈:负载机性能不足(例如内存CPU不足)
- 单台负载机存在瓶颈:网络原因(例如端口不足)
- 业务场景需要
模型
- slave启动后显示的端口号是回传测试结果的端口号
- 接收Master指令和脚本的端口号默认为1099
- 查看1099端口是否被占用
netstat -ano | findstr "1099" tasklist | findstr "1099")
- 脚本中设置的并发如果是100,那么每个slave都是100并发,总并发是所有slave之和。因此jmeter无法个性化配置不同的slave压力,这点不如LR
特点
- 真实的性能测试,不存在网络瓶颈问题
- GUI仅限windows平台,命令行可在linux与windows
- 测试结果保存在本地一台master上
- 使用这台master管理多个Jmeter Engines,也叫做slave
- 测试脚本会被master自动发送到作为负载生成器的slave,但数据文件不会
注意
- master也可以同时作slave,但要注意负载适量
- 所有负载生成器slave上安装相同的jmeter与jdk
- 防火墙和杀毒软件要关闭或过滤
- 确保所有master与slave在同一个网段或子网,没有网络延迟
- master与slave可以是windows或linux,不必全部是同一个OS,但要开放防火墙,否则connect fail
- 脚本使用的数据文件(比如CSV)需要单独传到每个slave,并且脚本中指定的文件路径要能够在每个slave找到该文件,常使用相对路径,较方便
步骤
windowsGUI模式
- 在负载生成器slave中启动jmeter-server.bat(如果master访问报错Engine is busy请右键管理员启动)
- master节点jmeter安装目录/bin下,编辑jmeter.properties文件。remote_hosts=根据实际情况添加slave的IP地址与端口号,逗号隔开,如图。
- 在master端,bin目录下双击jmeter.bat,启动jmeter
- 远程运行,如图可以使用debugSampler进行调试
命令行模式
- 此模式下无论windows还是linux都无需修改jmeter.porperties的remote_hosts,推荐!
- bin/jmeter.properties文件,server.rmi.ssl.disable从false改为true,电脑上没有装SSL所以不启动SSL为true,不然会报错
- 在所有slave端,bin目录下启动jmeter-server(没有点sh结尾):
./jmeter-server(这是linux,windows下是jmeter-server.bat)
如图,其中端口是回传数据端口,可以修改#server.rmi.localport=4000这个端口来调整,但通常无需调整
- 在master端执行你已调试好的脚本,以windows为例,命令如下:
- 在master端执行你已调试好的脚本,以linux为例,命令如下:
- slave的响应界面如下:
单服务器多节点模式
多个jmeter,在同一台服务器上,使用不同端口组成集群
0. 修改每个apache-jmeter-5.2/bin/jmeter.properties文件中server_port字段非重且不占用其他端口
- 修改每个apache-jmeter-5.2/bin/jmeter.properties文件中server.rmi.ssl.disable从false改为true
- 按照前述方法启动该服务器下的所有slave节点
比较
- 与LoadRunner的异同:
- 都可以实现分布式负载,各有优劣
- 都支持windows和linux下的slave,但master,jmeter跨平台,LR不
- LR可以指定每个slave生成不同数量的并发用户,jmeter不可
- jmeter中测试计划使用的数据文件不会随脚本发送到slave,而LR可以通过选择纳入LR管理一起发送到远端slave
- 单服务器多节点模式适用IP资源不足但硬件资源充足,实际适用要对压力机的资源监控,尤其是TCP连接情况(while true;do echo;date +%Y-%m-%d’ '%H:%M:%S.%s;netstat -n|awk ‘/^tcp/ {++S[$NF]} END{for(a in S) print a,S[a]}’;sleep 1;done)
其他
参考链接
https://baijiahao.baidu.com/s?id=1650706228652611614&wfr=spider&for=pc
Jmeter的master配置【linux】
进入到bin目录下
1.jmeter.properties文件的 remote_hosts 改为如下内容:
remote_hosts=IP1,IP2,IP3
2.执行所有的节点:
./jmeter -n -t xxx.jmx -r -l /data/result.jtl -j /data/jmeter.log
3.执行指定节点:
./jmeter -n -t xxx.jmx -R IP1 -l /data/result1.jtl -j /data/jmeter.log
-n 表示非界面的启动,即命令行方式启动jmeter
-t 启动的jmeter脚本
-l jmeter执行过程的源数据,后续的rt、tps都是根据这些源数据计算出来的;
-j jmeter的执行日志
-r, --runremote
Start remote servers (as defined in remote_hosts)
-R, --remotestart
Start these remote servers (overrides remote_hosts)
Jmeter的slave配置【linux】
1.无需配置系统变量,直接在jmeter-server文件中指定jdk的配置
export MINIMAL_VERSION=1.8.0
export JAVA_HOME=/data/jenkins/jdk1.8.0_221
export PATH= J A V A H O M E / b i n : {JAVA_HOME}/bin: JAVAHOME/bin:{PATH}
2.jmeter-server下面的内容更改为本机ip
RMI_HOST_DEF=-Djava.rmi.server.hostname=IP
3.jmeter的bin/jmeter.properties文件修改以下一个配置
server.rmi.ssl.disable=true
4.jmeter的bin目录下
nohup ./jmeter-server &