赞
踩
1.JMETER 为什么需要分布式
- 单台压测机通常会遇到客户端瓶颈,受制于客户机的性能。可能由于网络带宽,CPU,
- 内存的限制不能给到服务器足够的压力,这个时候你就需要用到分布式方案来解决客户机
- 的瓶颈,压测的结果也会更加接近于真实情况.
- 由于JMeter 并发的时候每并发一个用户(线程组)都需要消耗压测机的cpu、内存、带宽
- 等服务器资源。 随并发用户数量增加,单台压力机已经没法满足用户的业务需求,
- 所以,需要通过分布式多台压测机。
- 假设当前单台压测机的内存配置为:8G,机器未部署其他的应用,只安装JDK 和
- JMETER 等应用,该单台压测机并发的用户数量不能超过1000,如果并发用户数量
- 超过1000,就会导致单台压测机内存消耗尽,JMETER 工具出现假死现象,
- 聚合报告中间的响应时间就会失真,压测结果失去参考价值。所以,当并发用户数量
- 超过1000 用户的时候,就需要采用分布式进行压测,一台压测机作为控制机器,
- 另外一台机器做为代理机器。
2.JMETER分布式原理
- 分布式压测分为两块: 控制器(master)和代理(slave)
- 1、master 负责把脚本分发给 slave执行。
- 2、slave 负责执行脚本,产生对服务器的实际压力,slave 运行 non GUI model,
- 点击 jmeter-server.bat 即可。slave 执行脚本后,把压测的结果发送给 master。
- 3、master 作为控制器不加入实际测试(也可以加入),只负责发送和收集 agent 信息。
- 控制器-->slave(jmeterslave1/2/3/4)-->测试服务器。
3.处理过程
一:调度机master启动以后,会拷贝本地的jmx文件分发到远程的slave机器上; 二:slave机器拿到脚本以后启动命令行模式去执行脚本,对于每台slave机器拿到 的脚本都是一样的; 三:执行时,slave会把执行获得的数据结果传给master机器,master机器会收集 所有slave机器的信息并汇总,这样master机器上就存在一份所有slave机器汇总的 数据结果。 在所有需要做分布式的机器上部署java和jmeter,要求需要保证每台机器上部署的jmeter 版本相同插件版本也相同,最好部署在同一路径下(这样如果有csv参数化比较方便) jmeter底层用java开发,耗内存、cpu,如果项目要求大并发去压测服务端的话, jmeter单节点难以完成大并发的请求,这时就需要对jmeter进行分布式测试 调度机(Controller):主要负责性能测试脚本的分发,及各个执行机(Slave)的测试 结果收集汇总,报告产出。 执行机(Slave):主要负责执行性能测试脚本及断言等(命令行模式执行,无界面), 并将执行结果反馈给调度机(Controller),若断言执行成功则不返回请求响应数据 及详细断言信息。
4.jmeter 配置 slave 代理压测机
- 我的jmeter版本是 apache-jmeter-5.1,在 slave 机器上需要修改配置
- jmeter.properties,修改以下两处配置:
- 找到 server_port 去掉 #,设置端口 。
- 找到 server.rmi.ssl.disable=false 改成 true
-
- vi jmeter.properties
- server_port=1099
- server.rmi.ssl.disable=true
-
- 双击 jmeter-server.bat ,这个 ip 有用,要配到 master 机器上的配置文件里
- (若报错'jmeter' is not recognized,需要配置 jmeter 环境变量)
- (启动中间提示的IP 地址必须是内网的IP 地址,如果是外网IP 地址需要关闭虚拟网卡)
5.jmeter 配置master控制器压测机
- 打开 master的配置文件 jmeter.properties 找到 remote_hosts ,
- 把刚才第二个步骤的 ip 配进去;
-
- vi jmeter.properties
- remote_hosts=127.0.0.1:1099,192.168.1.15:1099
- server_port=1099
- server.rmi.ssl.disable=true
6.JMETER分布式部署注意事项
- 1、 slave 和master两台机器网络必须互通,telnet 端口是否通
- 2、Jmeter 版本必须一致
- 3、JDK 版本一致,JDK1.8 对应(JMETER 5.1),必须配置JDK 的环境变量,必须配置JMETER
- 环境变量
- 4、如果master也需要进行压测需启动jmeter.server,slave 机只需启动jmeter.server
- 即可
- 5、 服务上显示 运行成功提示
- Starting the test on host 127.0.0.0:1099
- 6、jmeter.server 启动是显示外网IP,(问题的根源在于:我安装的VMware的一个
- windows虚拟机的网络设置成了“Bridge 并勾选 Replicate physical network IP address
- 所以在controller机器的网络路由设置中,显示的网络连接为:VirtualBox Host-Oly Network,
- 在这个连接上右键,选择“Disable“,禁用掉,然后重新运行jmeter-server.bat,
- 在窗口中发现IP已经正确了,这样问题就解决了)
- (https://www.cnblogs.com/insane-Mr-Li/p/10713147.html)
- 7、分布式压测时,slave返回的 response data 在 views Result tree 中查看是空。
- 这个问题取消 jmeter.properties 中 mode=Standard 的注释,然后重启 jmeter master
- 即可解决(慎用此开关,经过测试600多的qps就能打满千兆带宽)
- 参数化文件路径必须是绝对路径,不要用相对路径。
7.JMETER SLAVE和MASTER 分布式启动压测
- Master 启动jmeter.bat 编写脚本
- 线程数:1
-
- 运行-远程启动所有:127.0.0.1:1099/192.168.1.15:1099
-
- slave 和 master 分布式进行压测的计算公式如下:
- 聚合报告中间的样本数量=线程数*循环次数*agent(机器台数)=1*1*2=2 2*3*3=12
- 分布式测试总样本数=线程数 x 循环次数 x slave负载机数量
-
-
- 注意事项:
- 有问题记得看jmeter.server.log 定位问题
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。