官网文档:
Apache JMeter 分布式测试分步(https://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.html#distributed-testing)
Apache JMeter:远程(分布式)测试(https://jmeter.apache.org/usermanual/remote-test.html)
一 使用分布式压力测试的原因
使用jmeter进行大并发压测时,单机受限内存、CPU、网络IO,会出现服务器压力还没有上去,但压测服务器由于模拟的压力太大死机的情况。
在 2-3 GHz CPU(最近的 CPU)上运行的单个 JMeter 客户端可以处理 1000-2000 个线程,具体取决于测试类型
通过远程运行JMeter,可以在许多低端计算机上复制测试,从而模拟服务器上更大的负载。JMeter 客户端的一个实例可以控制任意数量的远程 JMeter 实例,并从中收集所有数据。
注意:所有服务器都运行相同的测试计划。JMeter 不会在服务器之间分配负载,每个服务器都运行完整的测试计划。因此,如果您设置 1000 个线程并拥有 6 个 JMeter 服务器,则最终会注入 6000 个线程。
二 分布式压测原理
控制器节点:运行JMeter GUI的系统,用于控制测试
工作节点:运行 jmeter-server 的系统,它从 GUI 获取命令并将请求发送到目标系统
目标:我们计划对网络服务器进行压力测试
控制器节点启动时将压测脚本分发到各个工作节点上,然后通过远程启动各个工作节点,共同向目标服务器发送请求。
测试结束以后,各个工作节点主动将压测数据回传给控制器节点,由控制器节点统一汇总数据,并输出测试报告。
注意事项:
1、master(控制器节点)和各个slave(工作节点)机器必须使用同一局域网
2、分布式的局域网不要太大
3、最好使用网线,减少网络带宽的影响
三 分布式压测配置
(一)Jmeter分布式压测前的准备工作
1.系统上的防火墙已关闭或打开了正确的端口
2.所有客户端都位于同一子网中
3.确保JMeter可以访问服务器。
4.确保在所有系统上使用相同的JMeter混合版本将无法正常工作
5.插件要一致、csv文件要用相对路径
5.jdk 大版本要一致 java -version 大版本号要相同,小版本号可以不相同
6.RMI设置SSL或禁用它(下面有操作步骤)
(二)控制器节点配置
1进入jmeter/bin目录,打开jmeter.properties
2 remote_hosts 添加助攻机器ip
remote_hosts 添加助攻机器ip:端口,多个时,用英文逗号分开
3 修改server.rmi.ssl.disable=true
4 修改mode=Standard
–使用标准模式,开启之后,才能实时看到助攻机器的数据
(三)工作节点配置
1 打开jmeter.properties
进入jmeter/bin目录,打开jmeter.properties
2 配置server_port
server_port=自定义一个端口
3 配置server.rmi.por
server.rmi.port= 与上面相同的端口
4 配置server.rmi.ssl.disable
server.rmi.ssl.disable=true 不开启加密认证传输
四 分布式压测执行
(一)控制器节点运行
1.Linux端
./jmeter-server -Djava.rmi.server.hostname=控制器节点地址
2.Windows端
jmeter-server.bat -Djava.rmi.server.hostname=控制器结点
演示限制,将控制结点(windows)的jmeter也配置成其中一个控制结点。
(二)控制器节点运行
1.启动单个客户端
1.点击顶部的运行
2.选择远程启动
3.选择 IP 地址
2.启动所有客户端
1.点击顶部的运行
2.选择“远程启动全部”或使用 Ctrl + Shift + R
五 jmeter限制
- RMI 无法在没有代理的情况下跨子网进行通信;因此,没有代理,JMeter也无法跨子网进行通信。
- 从 2.9 版本开始,JMeter 将所有剥离响应数据的测试结果发送到控制台,这能够减少对网络 IO 的影响。确保监视网络流量,以便此流量不会引起争用
- 在 2-3 GHz CPU(最近的 CPU)上运行的单个 JMeter 客户端可以处理 1000-2000 个线程,具体取决于测试类型。
六 其他
- 1、控机器上的脚本发生变化,工作节点没有变,远程启动工作节点执行脚本时,按照最新的控机器脚本来执行
- ===工作节点上一切行为,都是控机器的指令执行。
- 2、有多台机器作为助攻机器时,活跃线程数,多条; 响应时间曲线,是不做任何处理,原样展示;tps曲线,原样展示。