前言
近期接了个算法压测需求,要对线上部署的机器资源做算法基准测试,当cpu\gpu\内存等机器资源其中一项达到上限则压测终止。但实际压测过程中,单机的硬件资源是有限的(如CPU、内存、磁盘I/O和网络带宽),当单机达到性能极限时,通过分布式的多个节点同时发起请求可以产生更高的并发负载。
本文介绍使用非GUI模式启动压力测试的操作步骤。
准备工作
- 硬件资源:以一台master机器,两台slave机器为例, 需准备3台机器。
- 系统上的防火墙已关闭或打开了正确的端口。
- 所有客户端都在同一个子网上。
- 所有系统使用相同版本的Jmeter和Java。
- 确保压测脚本和Jmeter可以正确访问服务器。
系统准备就绪后,可以设置远程测试了。
PS:Jmeter的工作方式是一个空直接点在多个工作节点上启动测试;
术语
控制节点: 运行Jmeter的系统,用于控制测试
工作节点: 运行Jmeter-server的系统,从Master接收命令,并向目标系统发送请求(简单理解为执行测试计划)
目标: 计划进行压力测试的服务器
压测过程
1. 更改配置文件
为方便使用,本教程尽量避免大范围更改配置文件
Master: 进入apache-jmeter-5.4.1/bin目录下,打开jmeter.properties
open jmeter.properties
禁用SSL/TLS:找到修改server.rmi.ssl.disable=true
这一步是为简化测试环境,减少加密解密带来的开销,提高测试效率。当测试完成后,需恢复SSL/TLS 的使用,确保生产环境中的通信安全。
Slave: 同Master
2.数据同步
压测脚本: java.jar 需放至压测机器的../apache-jmeter-5.4.1/lib/ext目录下
CSV文件: ..创建data目录,用于存放压测中用到的数据文件 ../data/XX.csv
压测数据: 可以为视频/图片任意数据,存放至 ../data/XX.mp4
3.开始测试
Slave启动jmeter-server
../apache-jmeter-5.4.1/bin下执行以下命令
jmeter -server -LDEBUG -Djava.rmi.server.hostname=本机IP -j d:\jmeter.log -Duser.dir=D:\data
工作机器正确启动后
Master控制远程工作机器,执行压测命令
进入AI.jmx所在目录下,执行以下命令,开启压测
jmeter -n -t AI.jmx -R slave1IP,slave2IP -l ./ret.jtl -e -o ./report -f -LDEBUG
备注
可开启远程主机和控制主机的资源活动监视器-性能,判断压测是否正常启动
常见的一些坑
- 通过修改配置文件,使master控制slave节点,修改的配置越多,越难恢复且遇到异常时,难排查
- 最好使用同一系统的slave机器压测,我最初使用一台MaxOS+Windows系统执行压测时,总是一个启动一个关闭,没排查到原因。