1.目的
a.单台压测机通常会遇到客户端瓶颈,对于请求量/并发量很大的情况需求受制于客户机的性能。可能由于网络带宽,CPU,内存的限制不能给到服务器足够的压力.
b.这个时候你就需要用到分布式方案来解决客户机的瓶颈,压测的结果也会更加接近于真实情况.
c.随并发用户数量增加,单台压力机已经没法满足用户的业务需求,所以,需要通过分布式多台压测机.
2.Jmter分布式原理
a、Jmeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave)。
b、执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,我理解它应该是通过命令行模式执行的。
c、执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总。
3.环境准备
a.JDK版本最好一致(不一致也行,大版本一致就行,比如1.8/1.7)
b.Jmeter版本一致,插件一致,csv文件,保存路径一致等(我这里用的jmeter4.0)
c.jmeter分布式可以跨系统配置 不论是windows还是linux都可以
b.同一局域网,准备负载机器2/3台或者更多(linux/windows都行)
4.控制机部署
a.打开JMeter/bin/jmeter.properties并编辑
b.全局搜索下ssl.disable 然后改成true
c. 为了避免后续压测时开不到负载机的响应结果,需要更改jmeter.propertoes文件,按照下图操作就能解决
5.Linux负载机部署(多台同理)
a.linux打开JMeter/bin/jmeter.properties并编辑(这里的jmeter版本和控制机的一致)
b.linux负载机启动jmeter-server时可能会报错 编辑文件 vim jmeter-server
6.Windows部署成负载机(多台同理)
a.编辑/bin/jmeter.properties文件
和控机一样配置,步骤仍是打开JMeter/bin/jmeter.properties并编辑
注意这里,负载机,只用配置自己的ip和端口就可以了(端口自定义都行)
b.每个ip对应的不同的网段
7.控制机生成密匙-负载机授权-分布式才能正常实现
a.生成密匙
接下来因为jmeter4.0版本及以上时,为了安全 分布式压测需要一个密匙才能正常实现
打开控制机的bin目录运行create-rmi-keystore.bat(或者直接执行改脚本也可以)
b.然后找到jdk并进入jdk\bin目录
c.完成后,会生成一个jks文件
d.配置jks文件
将文件复制粘贴给所有负载机中的jmeter\bin目录下面(Windows、linux同理)
案例:
8.运行所有负载机和控制机jmeter-server
a.linux运行方式:
可能会出现提示权限问题,赋予权限chomd -R 777 xxxx再次运行就行了
b.Windows运行方式:
9.启动控制机jmeter-server
注意控制机也要启动jmeter-server(所有机器启动完后就可以开始测试了)
a. 打开控制机的jmeter
选择远程启动某个负载机或者远程启动全部负载机,如果想终止,就点停止
b.演示:
c.负载机资源
d.控制机负载对比
可能因为量小,不是很显著,但还是看得出来
10.注意事项
同个局域网、ip端口要设置对
负载机和控制机启动jmeter-server挂后台
jmeter、jdk同版本、特别是jmeter脚本中如有同csv或者引用文件变量什么的,负载机和控制机都要有,且路径是一致
4.关闭防火墙systemctl stop firewalld
5.检查是否可以telnet通和互相ping通
最后发现了一个有趣问题,负载机的jmeter-server窗口-如果不是点最小化-而是直接点了其他程序占用后,控制机再向负载机发送请求就会卡住,无法连接到负载机了,所以如果负载机是其他同事在用的电脑,就最小化