【JMETER】jmeter分布式

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 定位问题

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值