Jmeter分布式压测(二)
一、分布式压测优点
- 单机发出的压力能力有限
- 被压测系统没到瓶颈之前,发压机难免先发生资源不足的情形
- 分散部署多个JMeter Agent,将压测脚本远程运行在它们身上,共同实
施压测 - 人多力量大
二、分布式压测系统架构
三、分布式压测系统搭建
1、搭建步骤
- 确定Master控制机器和Agent远程机器都已经配置好JAVA环境,并安装好Jmeter;
- 确定JMeter 控制节点与 Agent节点的运行位置;
- 控制节点与Agent节点之间的网络通信保持畅通;
- 防火墙 – 关闭 或者 设定开放具体端口;
- 确定各节点的IP与JMeter启动后需要占用的端口号
- 启动Agent 节点的远程监听模式
- 配置控制节点的jmeter.properties
2、配置Agent远程主机的Jmeter
进入jmeter安装目录bin文件下,找到jmeter.properties文件
[root@localhost bin]# cd /usr/local/jmeter/apache-jmeter-5.2.1/bin
[root@localhost bin]# ls
ApacheJMeter.jar examples jmeter.log jmeter-server.log mirror-server.cmd stoptest.cmd user.properties
BeanShellAssertion.bshrc hc.parameters jmeter-n.cmd jmeter.sh mirror-server.sh stoptest.sh utility.groovy
BeanShellFunction.bshrc heapdump.cmd jmeter-n-r.cmd jmeter-t.cmd reportgenerator.properties system.properties
BeanShellListeners.bshrc heapdump.sh jmeter.properties jmeterw.cmd report-template templates
BeanShellSampler.bshrc jaas.conf jmeter.properties1 krb5.conf saveservice.properties threaddump.cmd
create-rmi-keystore.bat jmeter jmeter-server log4j2.xml shutdown.cmd threaddump.sh
create-rmi-keystore.sh jmeter.bat jmeter-server.bat mirror-server shutdown.sh upgrade.properties
修改jmeter.properties文件配置,修改如下所示:
[root@localhost bin]# vi jmeter.properties
注意,在修改jmeter.properties文件时,请做好备份工作,避免修改错误后无法还原。
[root@localhost bin]# cp jmeter.properties jmeter.properties_20200201
- 修改remote_hosts=192.168.31.5:1099,其中192.168.31.5为Agent远程主机IP地址,1099为默认端口,此端口可以自行修改。
- 将server.rmi.ssl.disable=false,改为server.rmi.ssl.disable=true,并去掉注释(#)
3、配置Master主机中的Jmeter
实例为两台Agent主机(linux),一台Master控制机(windows10)。
首先,在Master主机中找到Jmeter安装目录
用编辑器打开jmeter.properties文件,配置修改如下:
修改remote_hosts=192.168.31.5:1099,192.168.31.6:1099,其中192.168.31.5和192.168.31.6为Agent远程主机IP地址,1099端口为Agent远程主机配置好的端口。
4、启动Agent机器Jmeter
- 在Agent机器上执行启动命令(默认端口1099):
[root@localhost ~]# cd /usr/local/jmeter/apache-jmeter-5.2.1/bin
[root@localhost bin]# ./jmeter-server -Djava.rmi.server.hostname=192.168.31.5
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[192.168.31.5:36228](local),objID:[-7012a52d:170011dad62:-7fff, 7679462634962469096]]]
- 在Agent机器上执行启动命令(个性化设置端口):
[root@localhost bin]# ./jmeter-server -Djava.rmi.server.hostname=192.168.31.5 -Dserver_port=1098
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[192.168.31.5:45407](local),objID:[-232cd94a:170011f8482:-7fff, 7120332058853617423]]]
注意:若配置为非默认端口(1099)时,需要在Master主机和Agent主机jmeter.properties文件进行相应的配置,即改为remote_hosts=192.168.31.5:1098。
5、启动Master主机Jmeter
在Master主机中找到Jmeter安装目录,点击jmeter.bat,启动jmeter。
点击Run,然后可以看到配置好的两台远程Agent主机
6、测试配置是否正确
执行压测程序判断Master主机和Agent远程主机是否正常执行程序,并返回结果。
点击Remote Start All,查看运行情况。
其中Agent主机提示信息:
[root@localhost bin]# ./jmeter-server -Djava.rmi.server.hostname=192.168.31.5
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[192.168.31.5:35317](local),objID:[-575b9ec:170012008a6:-7fff, -5363279659734136758]]]
Starting the test on host 192.168.31.5:1099 @ Sat Feb 01 22:32:28 CST 2020 (1580567548718)
Finished the test on host 192.168.31.5:1099 @ Sat Feb 01 22:32:30 CST 2020 (1580567550162)
[root@localhost bin]# ./jmeter-server -Djava.rmi.server.hostname=192.168.31.6
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[192.168.31.6:46347](local),objID:[d14046d:17002b8575a:-7fff, 4962803599531810442]]]
Starting the test on host 192.168.31.6:1099 @ Sun Feb 02 05:46:59 CST 2020 (1580593619825)
Finished the test on host 192.168.31.6:1099 @ Sun Feb 02 05:47:01 CST 2020 (1580593621210)
Master主机收到返回信息:
7、结合监控系统压测
四、分布式静默压测
1、执行步骤描述
-
运行JMeter静默压测,不用启动GUI
-
支持远程分布式压测
-
首先保证所有agent都已经启动
-
运行静默分布式压测命令:
jmeter -n -r -t <jmx_file> -l <jtl_log>
-
看监控页面,等待结束
-
结果记录导入看测试报告
2、静默压测实战
由于没有在windows系统中配置Jmeter环境变量,所无法直接使用jmeter命名,所以需要先进入Jmeter安装目录bin目录下,然后执行jmeter命令,并且需要把baidu.jmx文件拷贝到bin目录下。
jmeter -n -t baidu.jmx -r -l baidu_requests_results.jtl -e -o /home/tester/apache-jmeter-3.0/resultReport
参数说明:
-n : 非GUI 模式执行JMeter
-t : 执行测试文件所在的位置及文件名
-r : 远程将所有agent启动用在分布式测试场景下,不是分布式测试只是单点就不需要-r
-l : 指定生成测试结果的保存文件, jtl 文件格式
-e : 测试结束后,生成测试报告
-o : 指定测试报告的存放位置
-o 指定的文件及文件夹,必须不存在 ,否则执行会失败,对应上面的命令就是resultReport文件夹必须不存在否则报错
其中baidu.jmx为脚本文件,baidu_requests_results.jtl为生成的结果文件。
执行结果如下:
五、附录
在配置过程中可能会碰到很多的坑,具体可以参考:https://www.cnblogs.com/wuzm/p/10926535.html