Jmeter 分布式测试

Jmeter单机进行压测,受到单台机器的性能影响,Jmeter支持分布式测试,用一个控制节点去控制多个工作节点去模拟更多的用户。

版本信息

内容 版本号
JDK 1.8
Jmeter 5.6.2

分布式测试原理

jmeter 官网对分布式测试有说明,jmeter分布式测试官网介绍,工作原理,如下图所示

  1. 控制节点,该节点可以使用图形界面运行,可以直接使用 jmeter.bat运行,控制节点通过 RMI 通信,调用工作节点,发放执行脚本的命令,收集测试结果
  2. 工作节点,执行测试脚本命令,存储测试结果
  3. 目标服务器,需要压测的网站

分布式测试RMI 通信介绍

为了理解Jmeter 分布式测试调用的源码,写了一个样例工程,项目地址https://gitee.com/3281328128/jmeter-source-example, 下载项目之后,按照以下步骤配置

  1. 编译项目 mvn install,会发现工程下面产生了2个jar包,jmeter-rmi-server.jar, jmeter-rmi-client.jar
  2. server.jar 模拟的是工作节点, client.jar 模拟的是控制节点。把server.jar 复制到其它工作节点,同级目录复制一份 jmeter.properties文件
  3. 启动所有工作节点的jar包
shell 复制代码
java -jar jmeter-rmi-server.jar

ubuntu 运行报错

ubuntu 的需要加 -Djava.rmi.server.hostname=192.168.230.128,

hostname 填写对应的ip

shell 复制代码
java -Djava.rmi.server.hostname=192.168.230.128 -jar jmeter-rmi-server.jar
  1. 在 jmeter.properties 配置控制节点的 remote_hosts
    配置之前,先验证以下到对应的端口是否通的 telnet [ip] [端口]
shell 复制代码
telnet 192.168.137.209 1099

如果网络通的,会显示登录成功,跳转到空白页面

配置信息如下:

properties 复制代码
remote_hosts=192.168.137.209,192.168.230.128
  1. 启动控制节点的jar包
shell 复制代码
java -jar jmeter-rmi-client.jar

运行日志如下

shell 复制代码
2024-01-28 19:38:20.337 [34mINFO [0;39m [1;33m[main][0;39m  [36mc.s.j.r.c.ClientMain[0;39m 加载配置文件路径 jmeter.properties
2024-01-28 19:38:20.352 [34mINFO [0;39m [1;33m[main][0;39m  [36mc.s.j.r.c.ClientMain[0;39m 配置远程服务地址 192.168.137.209,192.168.230.128
2024-01-28 19:38:20.353 [34mINFO [0;39m [1;33m[main][0;39m  [36mc.s.j.r.c.ClientMain[0;39m 当前测试计划ID d6855a1d-cd35-4a4f-9ff4-9cd696333757
2024-01-28 19:38:20.354 [34mINFO [0;39m [1;33m[main][0;39m  [36mc.s.j.r.c.DistributedRunner[0;39m Configuring remote engine: 192.168.137.209
2024-01-28 19:38:20.781 [34mINFO [0;39m [1;33m[main][0;39m  [36mc.s.j.r.c.ClientJMeterEngine[0;39m 当前测试计划 TestPlan{id='d6855a1d-cd35-4a4f-9ff4-9cd696333757'}
2024-01-28 19:38:20.782 [34mINFO [0;39m [1;33m[main][0;39m  [36mc.s.j.r.c.DistributedRunner[0;39m Configuring remote engine: 192.168.230.128
2024-01-28 19:38:20.844 [34mINFO [0;39m [1;33m[main][0;39m  [36mc.s.j.r.c.ClientJMeterEngine[0;39m 当前测试计划 TestPlan{id='d6855a1d-cd35-4a4f-9ff4-9cd696333757'}
2024-01-28 19:38:20.845 [34mINFO [0;39m [1;33m[main][0;39m  [36mc.s.j.r.c.ClientJMeterEngine[0;39m running clientengine run method
2024-01-28 19:38:20.895 [34mINFO [0;39m [1;33m[main][0;39m  [36mc.s.j.r.c.ClientJMeterEngine[0;39m sent test to 192.168.137.209 basedir=
2024-01-28 19:38:20.897 [34mINFO [0;39m [1;33m[main][0;39m  [36mc.s.j.r.c.ClientJMeterEngine[0;39m Sending properties {}
2024-01-28 19:38:20.972 [34mINFO [0;39m [1;33m[main][0;39m  [36mc.s.j.r.c.ClientJMeterEngine[0;39m sent run command to 192.168.137.209
2024-01-28 19:38:20.975 [34mINFO [0;39m [1;33m[main][0;39m  [36mc.s.j.r.c.ClientJMeterEngine[0;39m running clientengine run method
2024-01-28 19:38:20.984 [34mINFO [0;39m [1;33m[main][0;39m  [36mc.s.j.r.c.ClientJMeterEngine[0;39m sent test to 192.168.230.128 basedir=
2024-01-28 19:38:20.985 [34mINFO [0;39m [1;33m[main][0;39m  [36mc.s.j.r.c.ClientJMeterEngine[0;39m Sending properties {}
2024-01-28 19:38:21.010 [34mINFO [0;39m [1;33m[main][0;39m  [36mc.s.j.r.c.ClientJMeterEngine[0;39m sent run command to 192.168.230.128
2024-01-28 19:38:21.012 [34mINFO [0;39m [1;33m[main][0;39m  [36mc.s.j.r.c.ClientMain[0;39m 远程调用完成

Jmeter 配置分布式测试步骤

配置工作节点 Worker Nodes

  1. 配置SSL
    参考官方配置 https://jmeter.apache.org/usermanual/remote-test.html#setup_ssl
    如果不想配置SSL , 修改jmeter 的 ssl 配置,设置为 true
shell 复制代码
# Set this if you don't want to use SSL for RMI
server.rmi.ssl.disable=true
  1. 启动工作节点
    windows 系统节点直接jmeter-server.bat 即可启动,Linux 系统需要使用命令行, hostname 填写机器IP
shell 复制代码
sh jmeter-server -Djava.rmi.server.hostname=192.168.230.128

配置控制节点

  1. 添加工作节点的IP到配置文件 jmeter.properties, 修该 remote_hosts、server.rmi.ssl.disable 配置项
properties 复制代码
# Remote Hosts - comma delimited
#remote_hosts=127.0.0.1
#remote_hosts=localhost:1099,localhost:2010
remote_hosts=192.168.137.209,192.168.230.128

# 禁用 ssl
# Set this if you don't want to use SSL for RMI
server.rmi.ssl.disable=true
  1. 启动 jmeter 图形界面, windows 直接点击 jmeter.bat

    如果配置成功,可以在远程启动这里看到之前配置的 remote_hosts。

启动测试

工作节点查看日志 bin/jmeter-server.log

shell 复制代码
chengdu@ubuntu:~/jmeter/apache-jmeter-5.6.3/bin$ tail -f jmeter-server.log
相关推荐
Coder_Boy_2 小时前
基于SpringAI的在线考试系统-相关技术栈(分布式场景下事件机制)
java·spring boot·分布式·ddd
程序员泠零澪回家种桔子4 小时前
分布式事务核心解析与实战方案
分布式
凯子坚持 c5 小时前
CANN 生态中的分布式训练利器:深入 `collective-ops` 项目实现高效多卡协同
分布式
惊讶的猫6 小时前
rabbitmq实践小案例
分布式·rabbitmq
禁默7 小时前
打破集群通信“内存墙”:手把手教你用 CANN SHMEM 重构 AIGC 分布式算子
分布式·重构·aigc
惊讶的猫9 小时前
rabbitmq初步介绍
分布式·rabbitmq
小镇敲码人9 小时前
华为CANN框架中HCCL仓库的全面解析:分布式通信的引擎
分布式·华为
User_芊芊君子9 小时前
【分布式训练】CANN SHMEM跨设备内存通信库:构建高效多机多卡训练的关键组件
分布式·深度学习·神经网络·wpf
酷酷的崽79810 小时前
CANN 开源生态解析(四):`cann-dist-train` —— 构建高效可扩展的分布式训练引擎
分布式·开源
惊讶的猫11 小时前
AMQP 与 RabbitMQ 四大模型
分布式·rabbitmq