一、背景介绍

使用Jmeter执行压测时,当需要执行大量线程并发时,通常由于压力机本身配置限制,以及单压力机网络流量带宽上限,导致单台压力机无法有效施压。此时性能的瓶颈在于压力机,而不是系统应用服务器,就需要使用Jmeter的分布式压测技术,以达到执行大量线程并发施压的目的。

如何判断瓶颈是否出现在压力机身上呢:

  • 当单台压力机线程数增加,比如从300线程增加到500线程,服务器接口tps却不再等比例增加;
  • 并且接口响应时间却很好,tp999较低且无明显增加;

则可判断服务器完全能承接更大的压力,是压力机到了瓶颈。此时可以查看压力机各项硬件网络性能指标进行确认。对于使用Linux压力机的场景来说,通常压力机的硬件配置都不错,更多的可能性是出现压测接口响应内容太多,导致高并发压测时网络带宽打满,从而导致压力上不去。

由于大部分正规的压力测试目前都是使用与系统应用服务器同网络的Linux服务器作为压力机施压,因此本文只介绍Jmeter分布式压测Linux配置及运行。如果需要Windows配置的教程,可自行网络搜索,教程颇多。

二、分布式压测Linux配置

分布式压测分为一台master机器和多台slave机器,master机器主要用于控制多台slave机器运行并汇总运行结果。当然,压力机资源紧张时,master机器只做控制机有点浪费,也可以通过配置让master机器也作为施压机,既做控制机又做施压机。

1. 配置准备工作

master配置:

  • jmeter.properties文件,remote_hosts配置上slave端的IP,多个slave地址用逗号分隔;
  • Master上已上传脚本文件和参数化文件;

slave配置:

  • jmeter.properties文件,server.rmi.ssl.disable=true;
  • jmeter4.0以上才需要修改,4.0以下没有这个字段值;
  • Slave上参数化文件要放在jmeter的bin目录下;

2. 分布式压测运行

  1. Slave上启动./jmeter-server:
    如果启动时报错:Cannot start. xxx is a loopback address, 则需要修改jmeter-server文件中:RMI_HOST_DEF=-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx,将这里设置为slave机器的ip地址就好了;
    在这里插入图片描述

  2. 在Master上执行分布式压测命令:
    sh jmeter.sh -n -t X.jmx -l X.jtl -e -o /xxx/html/report –r
    在这里插入图片描述
    在这里插入图片描述

      - -n:非GUI模式执行Jmeter
      - -t:执行测试文件所在的位置及文件名
      - -l:指定生成测试结果的保存文件,jtl文件格式
      - -e:测试结束后,生成测试报告
      - -o:指定测试报告的存放位置,注意:执行命令前,report文件夹下内容必须清空,否则会报错
      - -r:启动所有在remote_hosts配置的服务器。注意:不需要分布式测试,只是单点就不输 -r 即可
    

    注意点1:Slave机器上参数化文件要放在jmeter的bin目录下,不放就运行不了。已测试过:jmx脚本文件不用放,master机器会直接同步传给slave机器执行。

  3. master也作为执行机则需要以下配置:
    配置:
    - jmeter.properties文件,remote_hosts配置上master机器的IP+slave机器的IP,以逗号隔开,经实际测试,注意:一定是配IP,不是配127.0.0.1,不然当不了执行机;
    - master机器上,修改jmeter-server文件中:RMI_HOST_DEF=-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx,将这里设置为master机器的ip地址;

    master上启动./jmeter-server:
    - 针对master机器新开一个Linux窗口,先运行./jmeter-server, 不要忘了这一步;
    - 再回到当前窗口执行命令:sh jmeter.sh -n -t X.jmx -l X.jtl -e -o /xxx/html/report -r,则会发现master机器也作为压力机发起压力了

  4. 执行结束后下载HTML报告到本地用于填写报告使用:
    进入report文件夹下,打包report文件夹:zip -r report.zip ./*
    ./*是指将当前目录下的所有文件和文件夹全部压缩
    下载:sz report.zip
    下载后打开index.html即为本次压测的jmeter的HTML报告:
    在这里插入图片描述

  5. 收尾工作:
    最后,为了方便下次使用以及不影响别人使用,请将你本次压测生成的 result文件夹下的.jtl文件和report文件夹下的所有文件清空,并ctrl+c结束掉master机器和slave机器上启动的jmeter-server进程。

==============================================================================
以上,希望对你有帮助!

扫码关注程序员杨叔的微信公众号,免费获取更多全栈测试干货内容资料:
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐