当前位置:   article > 正文

【JMETER】jmeter分布式

jmeter分布式

1.JMETER 为什么需要分布式

  1. 单台压测机通常会遇到客户端瓶颈,受制于客户机的性能。可能由于网络带宽,CPU,
  2. 内存的限制不能给到服务器足够的压力,这个时候你就需要用到分布式方案来解决客户机
  3. 的瓶颈,压测的结果也会更加接近于真实情况.
  4. 由于JMeter 并发的时候每并发一个用户(线程组)都需要消耗压测机的cpu、内存、带宽
  5. 等服务器资源。 随并发用户数量增加,单台压力机已经没法满足用户的业务需求,
  6. 所以,需要通过分布式多台压测机。
  7. 假设当前单台压测机的内存配置为:8G,机器未部署其他的应用,只安装JDK 和
  8. JMETER 等应用,该单台压测机并发的用户数量不能超过1000,如果并发用户数量
  9. 超过1000,就会导致单台压测机内存消耗尽,JMETER 工具出现假死现象,
  10. 聚合报告中间的响应时间就会失真,压测结果失去参考价值。所以,当并发用户数量
  11. 超过1000 用户的时候,就需要采用分布式进行压测,一台压测机作为控制机器,
  12. 另外一台机器做为代理机器。

2.JMETER分布式原理

  1. 分布式压测分为两块: 控制器(master)和代理(slave)
  2. 1、master 负责把脚本分发给 slave执行。
  3. 2、slave 负责执行脚本,产生对服务器的实际压力,slave 运行 non GUI model,
  4. 点击 jmeter-server.bat 即可。slave 执行脚本后,把压测的结果发送给 master。
  5. 3、master 作为控制器不加入实际测试(也可以加入),只负责发送和收集 agent 信息。
  6. 控制器-->slave(jmeterslave1/2/3/4)-->测试服务器。

3.处理过程

  1. 一:调度机master启动以后,会拷贝本地的jmx文件分发到远程的slave机器上;
  2. 二:slave机器拿到脚本以后启动命令行模式去执行脚本,对于每台slave机器拿到
  3. 的脚本都是一样的;
  4. 三:执行时,slave会把执行获得的数据结果传给master机器,master机器会收集
  5. 所有slave机器的信息并汇总,这样master机器上就存在一份所有slave机器汇总的
  6. 数据结果。
  7. 在所有需要做分布式的机器上部署java和jmeter,要求需要保证每台机器上部署的jmeter
  8. 版本相同插件版本也相同,最好部署在同一路径下(这样如果有csv参数化比较方便)
  9. jmeter底层用java开发,耗内存、cpu,如果项目要求大并发去压测服务端的话,
  10. jmeter单节点难以完成大并发的请求,这时就需要对jmeter进行分布式测试
  11. 调度机(Controller):主要负责性能测试脚本的分发,及各个执行机(Slave)的测试
  12. 结果收集汇总,报告产出。
  13. 执行机(Slave):主要负责执行性能测试脚本及断言等(命令行模式执行,无界面),
  14. 并将执行结果反馈给调度机(Controller),若断言执行成功则不返回请求响应数据
  15. 及详细断言信息。

4.jmeter 配置 slave 代理压测机

  1. 我的jmeter版本是 apache-jmeter-5.1,在 slave 机器上需要修改配置 
  2. jmeter.properties,修改以下两处配置:
  3. 找到 server_port 去掉 #,设置端口 。
  4. 找到 server.rmi.ssl.disable=false 改成 true
  5. vi jmeter.properties
  6. server_port=1099
  7. server.rmi.ssl.disable=true
  8. 双击 jmeter-server.bat ,这个 ip 有用,要配到 master 机器上的配置文件里
  9. (若报错'jmeter' is not recognized,需要配置 jmeter 环境变量)
  10. (启动中间提示的IP 地址必须是内网的IP 地址,如果是外网IP 地址需要关闭虚拟网卡)

5.jmeter 配置master控制器压测机

  1. 打开 master的配置文件 jmeter.properties 找到 remote_hosts ,
  2. 把刚才第二个步骤的 ip 配进去;
  3. vi jmeter.properties
  4. remote_hosts=127.0.0.1:1099,192.168.1.15:1099
  5. server_port=1099
  6. server.rmi.ssl.disable=true

6.JMETER分布式部署注意事项

  1. 1、 slave 和master两台机器网络必须互通,telnet 端口是否通
  2. 2、Jmeter 版本必须一致
  3. 3、JDK 版本一致,JDK1.8 对应(JMETER 5.1),必须配置JDK 的环境变量,必须配置JMETER
  4. 环境变量
  5. 4、如果master也需要进行压测需启动jmeter.server,slave 机只需启动jmeter.server
  6. 即可
  7. 5、 服务上显示 运行成功提示
  8. Starting the test on host 127.0.0.0:1099
  9. 6、jmeter.server 启动是显示外网IP,(问题的根源在于:我安装的VMware的一个
  10. windows虚拟机的网络设置成了“Bridge 并勾选 Replicate physical network IP address
  11. 所以在controller机器的网络路由设置中,显示的网络连接为:VirtualBox Host-Oly Network,
  12. 在这个连接上右键,选择“Disable“,禁用掉,然后重新运行jmeter-server.bat,
  13. 在窗口中发现IP已经正确了,这样问题就解决了)
  14. (https://www.cnblogs.com/insane-Mr-Li/p/10713147.html)
  15. 7、分布式压测时,slave返回的 response data 在 views Result tree 中查看是空。
  16. 这个问题取消 jmeter.properties 中 mode=Standard 的注释,然后重启 jmeter master
  17. 即可解决(慎用此开关,经过测试600多的qps就能打满千兆带宽)
  18. 参数化文件路径必须是绝对路径,不要用相对路径。

7.JMETER SLAVE和MASTER 分布式启动压测

  1. Master 启动jmeter.bat 编写脚本
  2. 线程数:1
  3. 运行-远程启动所有:127.0.0.1:1099/192.168.1.15:1099
  4. slave 和 master 分布式进行压测的计算公式如下:
  5. 聚合报告中间的样本数量=线程数*循环次数*agent(机器台数)=1*1*2=2 2*3*3=12
  6. 分布式测试总样本数=线程数 x 循环次数 x slave负载机数量
  7. 注意事项:
  8. 有问题记得看jmeter.server.log 定位问题

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
  

闽ICP备14008679号