当前位置: 首页 > news >正文

基于Jmeter的分布式压测环境搭建及简单压测实践

写在前面

平时在使用Jmeter做压力测试的过程中,由于单机的并发能力有限,所以常常无法满足压力测试的需求。因此,Jmeter还提供了分布式的解决方案。本文是一次利用Jmeter分布式对业务系统登录接口做的压力测试的实践记录。按照惯例,在正式开始前,先简单介绍一下本文大纲:

  • Jmeter集合点用法
  • Jmeter命令行参数详解
  • Jmeter分布式部署方案
  • Jmeter分布式调度原理
  • Jmeter分布式部署过程
  • Jmeter分布式压测业务系统登录接口实践

一、Jmeter集合点用法

集合点是使用Jmeter进行压力测试中一个绕不开的话题。

集合点通俗地理解就是,例如要模拟100个并发用户,集合点会将这100个线程集结完毕后,统一释放,同时对系统进行施压。Jmeter中可以通过同步定时器 Synchronizing Timer 来完成:

同步定时器中”模拟用户组的数量“与线程组的线程数量的关系:

1.当模拟用户组的数量 = 线程组的线程数量

例如数量都是5,那么运行测试,Jmeter会等到5个用户同时准备好后,并发发起请求;

2.当模拟用户组的数量 < 线程组的线程数量

① 未设置超时时间

例如:模拟用户为5,线程数量为8,那么在运行Jmeter后,Jmeter会先同时发起5个请求,剩下3个用户不足集合点的数量5,由于又没有设置超时时间,因此达不到集合点的数量要求,Jmeter就会一直处于等待状态;

② 已设置超时时间

例如:模拟用户为5,线程数量为8,超时时间设置为3000(以毫秒为单位,即3秒)

那么在运行Jmeter后,Jmeter会先同时发起5个请求,由于剩下3个用户不足集合点要求的数量5,因此会超时等待3秒钟,在3秒钟后再同时发起剩下的3个用户的请求,共8个用户;

3.当模拟用户组的数量 > 线程组的线程数量

① 未设置超时时间

例如:模拟用户为8,线程数量为5,超时时间为0

由于设置的模拟用户数量为8,即集合点数量为8,而线程组的总用户数只有5,因此达不到集合点数量要求,且又没有设置超时时间,所以Jmeter会一直处于等待状态,不会发起任何请求,如下图所示:

② 已设置超时时间

例如:模拟用户为5,线程数量为8,超时时间设置为3000(以毫秒为单位,即3秒)

由于设置的模拟用户数量为8,即集合点数量为8,而线程组的总用户数只有5,因此达不到集合点数量要求,但是设置了超时时间为3秒,所以Jmeter会在3秒后,同时发起5个(用户)请求,如下图所示:

二、Jmeter命令行参数详解

参数作用
-n表示在命令行模式下运行 JMeter
-t指定脚本文件
-R指定从节点(agent)执行测试,多个ip用逗号隔开
-r表示启动全部agent
-f表示每次都会清空前一次的执行结果,写入新的结果
-l生成测试结果文件,默认以 jtl 结尾
-e生成测试报告
-o指定生成测告的位置,必须为空
-g指定已存在的jtl结尾的测试文件生成报告

常见用法:


./jmeter.bat -n -t test.jmx # 以命令行方式运行test.jmx脚本./jmeter.bar -n -t test.jmx -l test.jtl # 以命令行方式运行test.jmx脚本,并生成测试结果文件test.jtl./jmeter.bar -n -t test.jmx -f -l test.jtl -e -o report # 以命令行方式运行test.jmx脚本,每次生成结果前先清空test.jtl,同时在report目录下生成测试报告./jmeter.bar -n -t test.jmx -l test.jtl -R 192.168.1.122 # 指定远程主机192.168.1.122执行测试

三、Jmeter分布式部署方案

主机IP地址
Master主节点(Windows)192.168.1.131
Slave从节点-1(Linux)192.168.1.121
Slave从节点-2(Linux)192.168.1.122
Slave从节点-3(Linux)192.168.1.123

注意事项:

  • 主节点及各个从节点机器必须提前安装好Java环境;
  • 主节点及各个从节点的Jmeter版本保持统一;
  • master会在发送测试计划时将jmx的脚本文件发送到各个从节点,因此,脚本文件不用手动上传到各个从节点;
  • 但是master不会将外部文件一起发送,所以在测试中用到的CSV等参数化文件,需要把CSV等文件手动上传到各个从节点,最好都放置在bin目录下,Jmeter会直接从bin目录下开始查找;

四、Jmeter分布式调度原理

1.各节点作用
  • 主节点:主要负责管理从节点(负载机)、分配调度任务(脚本分发)、收集测试结果
  • 从节点:执行测试任务,模拟并发请求
2.工作流程

① 主节点负责将测试任务、测试脚本下发给各个从节点;

② 从节点接收到测试任务后,开始驱动各自环境上的Jmeter执行测试任务、模拟并发请求;

③ 从节点执行完成后会将测试结果回传给主节点;

④ 最后主节点将各个从节点的收集回来的测试结果进行展示;

五、Jmeter分布式部署过程

1.主节点部署

① 编辑主节点jmeter.properties配置文件

  • 第268行,remote_hosts添加从节点主机地址,多个从节点用逗号隔开(注意:不同版本可能存在差异)
  • 第272行,为主节点端口号,如有端口占用,可手动修改
  • 第345行,server.rmi.ssl.disable由false改为true(关闭ssl)

② 主节点启动jmeter-server服务

Windows环境下直接点击运行Jmeter的bin目录下的jmeter-server.bat即可,启动成功会出现如下提示:

2.从节点部署

① 将Jmeter压缩包上传到各个从节点并解压

从节点均为Linux环境,解压命令为:

  1. unzip apache-jmeter.zip

② 修改jmeter.properties配置文件

  • 第345行,server.rmi.ssl.disable由false改为true(关闭ssl)

③ 启动jmeter-server服务

  1. chmod -R +x bin # jmeter-server、jmeter文件都需要执行权限,可以简单粗暴使用chmod -R参数赋予整个bin目录执行权限

  2. ./jmeter-server # 启动jmeter-server服务

启动成功会出现如下提示:

3.测试主节点与从节点的连通性

可以通过Jmeter工具-运行-远程启动,选择一个从节点;也可以使用命令行-R参数指定一个从节点运行:

如下图所示,Starting...表示主节点已将任务下发到指定的从节点,从节点开始执行测试任务

4.Jmeter分布式部署常见问题及报错解决

1)启动远程主机,提示“Engine is busy - please try later”

原因:本地或者远程负载机,未正常关闭

解决:杀掉进程重新启动(可以观察主节点及从节点的jmeter-server日志,如果只有Starting,没有Finished,那么大概率是这台机器出现了问题)

2)主节点发起测试后未接收到结果数据

如:执行成功后,察看结果树无数据,主节点及从节点也没有任何报错

原因:测试脚本中有参数化,远程节点上参数化csv文件跟本地测试中设置的目录不一致,或从节点上缺少csv文件

解决:将csv文件分别上传一份到各个从节点,csv文件最好设置相对路径,不要设置绝对路径,将csv文件存放在bin目录下

3)Jmeter启动从节点运行测试报错“connection refused”

原因:从节点未启动jmeter-server服务

解决:各个从节点均启动jmeter-server服务

六、Jmeter压测业务系统登录接口实践

  • 最大并发量:和我们业务系统负责人交流后,得知系统理论上支持6000~7000个左右的用户同时并发登录是没有问题的;
  • 测试的目标:测试出业务系统是否如他提供的数据、支持那么大的用户并发登录;
  • 实测数据:3台负载机,每台启动500个线程,共1500个用户并发,测试结果如下,各个负载机模拟的用户均登录正常、无报错,被测业务系统所在服务器内存、CPU均无大的波动;

  • 升压:并发用户数量1500、2100左右,系统响应都比较稳定,当并发用户量达到每台1000,一共3000个用户同时请求时,部分用户登录会返回500,总体失败率在3%左右(预测当并发用户数达到更大规模4000、5000、6000,失败的比例还会增大)

小结

  • 以上就是利用Jmeter实现分布式压测的一次实践,确切的说应该是初探;
  • 在压力测试过程中,CPU和内存的动态变化我并没有做详细的监控,后续准备借助JMeter+InfluxDB+Grafana的监控组合来可视化监控测试过程;
  • 性能测试是一个庞大的工程和命题,性能测试工具仅仅是实现性能测试的技术手段,会使用性能测试工具不代表就掌握了性能测试;
  • 所有使用性能测试工具的目的都只是为了模拟压力的发起,在性能测试过程中,工具仅仅起到脚本开发、场景实现、测试执行等作用,而性能测试还包括需求获取、场景设计、结果分析和调优等诸多环节,最终还是要靠人来实现;
  • 尤其是性能瓶颈分析和调优,除了依赖性能测试结果外,还需要依赖于人的强大的性能测试功底,以及对业务、对系统架构的了解;

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关文章:

基于Jmeter的分布式压测环境搭建及简单压测实践

写在前面 平时在使用Jmeter做压力测试的过程中&#xff0c;由于单机的并发能力有限&#xff0c;所以常常无法满足压力测试的需求。因此&#xff0c;Jmeter还提供了分布式的解决方案。本文是一次利用Jmeter分布式对业务系统登录接口做的压力测试的实践记录。按照惯例&#xff0…...

IDEA常用代码模板

在 IntelliJ IDEA 中,常用代码模板可以帮助你快速生成常用的代码结构和模式。以下是一些常用的代码模板及其使用方法: 动态模板(Live Templates) psvm:生成 public static void main(String[] args) 方法。sout:生成 System.out.println(); 语句。soutv:生成 System.ou…...

基于大语言模型的多意图增强搜索

随着人工智能技术的蓬勃发展&#xff0c;大语言模型&#xff08;LLM&#xff09;如Claude等在多个领域展现出了卓越的能力。如何利用这些模型的语义分析能力&#xff0c;优化传统业务系统中的搜索性能是个很好的研究方向。 在传统业务系统中&#xff0c;数据匹配和检索常常面临…...

【ai】ubuntu18.04 找不到 nvcc --version问题

nvcc --version显示command not found问题 这个是cuda 库: windows安装了12.5 : 参考大神:解决nvcc --version显示command not found问题 原文链接:https://blog.csdn.net/Flying_sfeng/article/details/103343813 /usr/local/cuda/lib64 与 /usr/local/cuda-11.3/lib64 完…...

深入了解DDoS攻击及其防护措施

深入了解DDoS攻击及其防护措施 分布式拒绝服务&#xff08;Distributed Denial of Service&#xff0c;DDoS&#xff09;攻击是当今互联网环境中最具破坏性和普遍性的网络威胁之一。DDoS攻击不仅危及企业的运营&#xff0c;还可能损害其声誉&#xff0c;造成客户信任度的下降。…...

【面试系列】产品经理高频面试题及详细解答

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff1a;详细讲解AIGC的概念、核心技术、…...

前端特殊字符数据,后端接收产生错乱,前后端都需要处理

前端&#xff1a; const data {createTime: "2024-06-11 09:58:59",id: "1800346960914579456",merchantId: "1793930010750218240",mode: "DEPOSIT",channelCode: "if(amount > 50){iugu2pay;} else if(amount < 10){iu…...

力扣热100 哈希

哈希 1. 两数之和49.字母异位词分组128.最长连续序列 1. 两数之和 题目&#xff1a;给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。你可以假设每种输入只会对应一个答案。…...

[图解]SysML和EA建模住宅安全系统-05-参数图

1 00:00:01,140 --> 00:00:03,060 这是实数没错&#xff0c;这是分钟 2 00:00:03,750 --> 00:00:07,490 但是你在这里选&#xff0c;选不了的 3 00:00:07,500 --> 00:00:09,930 因为它这里不能够有那个 4 00:00:11,990 --> 00:00:13,850 但是我们前面这里 5 00…...

JavaScript——对象的创建

目录 任务描述 相关知识 对象的定义 对象字面量 通过关键字new创建对象 通过工厂方法创建对象 使用构造函数创建对象 使用原型(prototype)创建对象 编程要求 任务描述 本关任务&#xff1a;创建你的第一个 JavaScript 对象。 相关知识 JavaScript 是一种基于对象&a…...

大二暑假 + 大三上

希望&#xff0c;暑假能早睡早起&#xff0c;胸围达到 95&#xff0c;腰围保持 72&#xff0c;大臂 36&#xff0c;小臂 32&#xff0c;小腿 38&#x1f36d;&#x1f36d; 目录 &#x1f348;暑假计划 &#x1f339;每周进度 &#x1f923;寒假每日进度&#x1f602; &…...

C语言使用先序遍历创建二叉树

#include<stdio.h> #include<stdlib.h>typedef struct node {int data;struct node * left;struct node * right; } Node;Node * createNode(int val); Node * createTree(); void freeTree(Node * node);void preOrder(Node * node);// 先序创建二叉树 int main()…...

如何在服务器中安装anaconda

文章目录 Step1: 下载 Anaconda方法1&#xff1a;下载好sh文件上传到服务器安装方法2&#xff1a;在线下载 Step2: 安装AnacondaStep3: 配置环境变量Step 4: 激活AnacondaStep4: 检验安装是否成功 Step1: 下载 Anaconda 方法1&#xff1a;下载好sh文件上传到服务器安装 在浏览…...

夸克网盘拉新暑期大涨价!官方授权渠道流程揭秘

夸克网盘拉新暑期活动来袭&#xff0c;价格大涨&#xff01;从7月1日开始持续两个月&#xff0c;在这两个月里夸克网盘拉新的移动端用户&#xff0c;一个从原来的5元涨到了10元。这对做夸克网盘拉新的朋友来说&#xff0c;真的是福利的。趁着暑期时间多&#xff0c;如果有想做夸…...

机器学习(三)

机器学习 4.回归和聚类算法4.1 线性回归4.1.1 线性回归的原理4.1.2 线性回归的损失和优化原理 4.2 欠拟合与过拟合4.2.1 定义4.2.2 原因以及解决方法4.2.3 正则化 4.3 线性回归改进-岭回归4.3.1 带L2正则化的线性回归-岭回归4.3.2 API 4.4 分类算法-逻辑回归与二分类4.4.1 定义…...

PostgreSQL 基本SQL语法(二)

1. SELECT 语句 1.1 基本 SELECT 语法 SELECT 语句用于从数据库中检索数据。基本语法如下&#xff1a; SELECT column1, column2, ... FROM table_name; 例如&#xff0c;从 users 表中检索所有列的数据&#xff1a; SELECT * FROM users; 1.2 使用 WHERE 条件 WHERE 子…...

linux 控制台非常好用的 PS1 设置

直接上代码 IP$(/sbin/ifconfig eth0 | awk /inet / {print $2}) export PS1"\[\e[35m\]^o^\[\e[0m\]$ \[\e[31m\]\t\[\e[0m\] [\[\e[36m\]\w\[\e[0m\]] \[\e[32m\]\u\[\e[0m\]\[\e[33m\]\[\e[0m\]\[\e[34m\]\h(\[\e[31m\]$IP\[\e[m\])\[\e[0m\]\n\[\e[35m\].O.\[\e[0m\]…...

【紫光同创盘古PGX-Nano教程】——(盘古PGX-Nano开发板/PG2L50H_MBG324第十二章)Wifi透传实验例程说明

本原创教程由深圳市小眼睛科技有限公司创作&#xff0c;版权归本公司所有&#xff0c;如需转载&#xff0c;需授权并注明出处&#xff08;www.meyesemi.com) 适用于板卡型号&#xff1a; 紫光同创PG2L50H_MBG324开发平台&#xff08;盘古PGX-Nano&#xff09; 一&#xff1a;…...

详述乙级资质企业在城市综合管廊与隧道一体化设计中的挑战与机遇

挑战 1. 技术与设计复杂性 城市综合管廊与隧道项目往往涉及复杂的地质条件、地下水位、周边建筑物影响等因素&#xff0c;要求企业具备高水平的岩土工程、结构工程和流体力学等专业知识。此外&#xff0c;一体化设计需要跨学科合作&#xff0c;协调不同系统的兼容性&#xff…...

如何借助物联网实现农情监测与预警

如何借助物联网实现农情监测与预警&#xff1f; 物联网技术&#xff0c;作为信息技术与传统行业的深度融合产物&#xff0c;正逐步变革着农业生产的管理模式&#xff0c;特别是在农情监测与预警领域展现出巨大潜力。其核心在于通过感知层的各类传感器、通信层的数据传输技术以…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...