为什么要做分布式压测呢?
在实际工作中, Jmeter 可能需要虚拟上千个并发用户,而每台电脑实际能虚拟的线程数是有限的
java.net.BindException: Address already in use: connect
上面 Jmeter 的这个报错信息,就是具体的表现(一般一台电脑能构建的虚拟用户是2000个左右)
当然也能通过修改注册表暂时性的解决这个问题【可以参考我的这篇】:
Jmeter压测报错:java.net.BindException: Address already in use: connect解决办法
但是这个方式是针对 Windows 环境下压测的解决办法,放到 Linux 环境下就不适用了
于是乎就有了分布式【分摊机器自身的压力】:多台机器一起虚拟并发用户,实现更大的并发
一、分布式配置
1. 保持一致性【最简单的方法:jmeter 和脚本放一起一起打包放在 Linux】:
分布式机器要在同一个局域网
JDK 版本一致【大版本一致比如:1.8.xxx】
Jmeter 版本一致 【本机 Jmeter 的 zip 压缩包】
插件及版本一致
防火墙全部关掉【不管是主控机还是协助的傀儡机】
【 操 作 系 统 没 有 要 求 】
2. 分布式机器 Linux 的配置【也叫助攻机器配置】
修改 bin 目录下的 jmeter.properties
1.查找 server_port 关键词,在底下添加一个自定义的端口: server_port = 3211
2.查找 server.rmi.port 关键词,在底下添加一个自定义认证的端口 server.rmi.port = 3211
3.查找 server.rmi.ssl.disable 关键词,在底下添加 server.rmi.ssl.disable = True (去掉认证)
4. linux : 定位带 bin 目录赋予全文件夹的执行权限: chmod +x -R bin/
5. 定位到 bin 目录启动:sh ./jmeter-server -Djava.rmi.server.hostname=助攻机器ip 【只需将 ip 添加至远程启动项】
6. Linux :配置防火墙 systemctl stop firewalld.service
3、 主控机机器 Windows 的配置:
修改 bin 目录下的 jmeter.properties
1. 查找并添加 remot_hosts=127.0.0.1:5555,192.168.1.1:3211 [本机+助攻机器的 ip 端口号地址拼接]
2. 查找 server.rmi.ssl.disable 关键词,在底下添加 server.rmi.ssl.disable = True (去掉认证)
3. 查找并 [ 启 用 ] : mode=Standard 去掉#号即为启用
4. 文件保存,重新进入 Jmeter 的 bin 目录
5. cmd 进入 bin 目录,将本机ip也作为远程启动 项【jmeter-server.bat -Djava.rmi.server.hostname = 本机ip即可】
6. 启动成功后,保持命令行窗口运行不要关闭
第五步操作,执行出现下图所示的信息即为设置成功!
二、主控启动助攻机器,运行分布式执行压测脚本
-
重启 Windows 的 Jmeter
-
选择脚本,点击菜单栏的 【运行】> 【远程启动】 > 【可以单选助攻机】
-
如果开始做压测,就点击 【远程启动所有】
-
点击选择后去 Linux 可以看到助攻被启动 【注意防火墙要关闭】
-
助攻机器执行命令时,根据主控机其的指令执行【脚本无需传给傀儡机,但是CSV文件一定要每台傀儡机各一份】
压测前的准备:
1、将所有主控、辅助机的Jmeter全部启动
【需要注意的是,所有压测机防火墙全都要关闭而且主辅机要互相 Ping 通】
主机(本机桌面的jmeter) :
1.1 D:\apache-jmeter-5.4\bin下进入cmd命令行
1.2 输入以下字段及为启动:jmeter-server.bat -Djava.rmi.server.hostname=192.168.0.35
辅助机(两台):
1.1 进入bin目录 : cd /usr/local/jmeter/apache-jmeter-5.4/bin
1.2 启动jmeter :./jmeter-server -Djava.rmi.server.hostname=192.168.0.33
2、启动监控插件 ServerAgent-2.2.3 :
1.1 进入serveragent目录: cd /usr/local/jmeter/apache-jmeter-5.4/serveragent/ServerAgent-2.2.3
1.2 关闭防火墙:systemctl stop firewalld.service
1.3 启动33监控服务并指定监听端口号:./startAgent.sh --udp-port 0 --tcp-port 3233