基于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的监控组合来可视化监控测试过程;
  • 性能测试是一个庞大的工程和命题,性能测试工具仅仅是实现性能测试的技术手段,会使用性能测试工具不代表就掌握了性能测试;
  • 所有使用性能测试工具的目的都只是为了模拟压力的发起,在性能测试过程中,工具仅仅起到脚本开发、场景实现、测试执行等作用,而性能测试还包括需求获取、场景设计、结果分析和调优等诸多环节,最终还是要靠人来实现;
  • 尤其是性能瓶颈分析和调优,除了依赖性能测试结果外,还需要依赖于人的强大的性能测试功底,以及对业务、对系统架构的了解;

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/363314.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web渗透-逻辑漏洞

一、概述 逻辑漏洞是指由于程序逻辑不严或逻辑太复杂&#xff0c;导致一些逻辑分支不能够正常处理或处理错误&#xff0c;一般出现任意密码修改&#xff08;没有旧密码验证&#xff09;,越权访问&#xff0c;密码找回&#xff0c;交易支付金额等。对常见的漏洞进行过统计&…

动手学深度学习(Pytorch版)代码实践 -计算机视觉-40目标检测和边界框

40目标检测和边界框 import torch from PIL import Image import matplotlib.pylab as plt from d2l import torch as d2lplt.figure(catdog) img Image.open(../limuPytorch/images/catdog.jpg) plt.imshow(img) plt.show()# 边界框 #save def box_corner_to_center(boxes):…

Android 14 独立编译 Setting apk

我们在setting 目录下是用 mm 会报错。 所以应该在 源码主目录 采用 make Settings 进行编译 很多时候如果在apk 目录下 mm 单独编译会出错&#xff0c; 都可以才用这种方式进行编译。

同三维T908转换器 SDI转DVI/HDMI/VGA/色差分量/AV转换器

同三维T908转换器 SDI转DVI/HDMI/VGA/色差分量/AV转换器 1路SDI进&#xff0c;1路DVI(可转HDMI/VGA/色差分量/AV)3.5音频1路SDI出,可以支持音频解嵌&#xff0c;也可把3.5音频加嵌转换输出&#xff0c;输出分辨率可调&#xff0c;支持图像翻转180度 一、产品简介 SDI转万能转…

音视频入门基础:H.264专题(5)——FFmpeg源码中 解析NALU Header的函数分析

音视频入门基础&#xff1a;H.264专题系列文章&#xff1a; 音视频入门基础&#xff1a;H.264专题&#xff08;1&#xff09;——H.264官方文档下载 音视频入门基础&#xff1a;H.264专题&#xff08;2&#xff09;——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

运行时库链接方式实践指南(MT、MD、MTd、MDd)

前言 笔者曾经编译一个库提供给使用者&#xff0c;提供库后发现由于运行时库连接方式不一致&#xff0c;导致使用者无法连接笔者提供的库。另一方面&#xff0c;理解和选择正确的运行时链接方式对于构建高效、可靠的应用程序至关重要。 因此&#xff0c;本文将展开运行时库的基…

运算放大器(运放)输入偏置电流、失调电流

输入偏置电流定义 理想情况下&#xff0c;并无电流进入运算放大器的输入端。而实际操作中&#xff0c;始终存在两个输入偏置电流&#xff0c;即IB和IB-(参见图1)。 I B I_B IB​的值大小不一&#xff0c;在静电计AD549中低至60 fA(每三微秒通过一个电子)&#xff0c;而在某些高…

go~缓存设计配合singleFlight

一个缓存设计&#xff0c;配合go的singleFlight 最开始的设计如下 添加分布式缓存 上线后分布式缓存上涨的流量并不等于下游下降的流量&#xff0c;而是下游下降的流量 * 2&#xff5e;3 究其原因&#xff0c;就是采用了go的singleFlight&#xff0c;假定请求缓存时长10ms&a…

仿真CAN报文发送的CRC校验算法(附CAPL代码)

文章目录 前言一、为什么CAN报文有CRC&#xff1f;二、怎么确定是否需要做CRC校验&#xff1f;三、CAPL代码实现CRC算法 前言 关于CRC校验的基本理论、算法实现网上已经有很多介绍文章&#xff0c;本文不再赘述。只是记录在项目测试中真正开发CRC算法并进行测试的一些体会。 …

Geoserver源码解读四 REST服务

文章目录 文章目录 一、概要 二、前置知识点-FreeMarker 三、前置知识点-AbstractHttpMessageConverter 3.1 描述 3.2 应用 四、前置知识点-AbstractDecorator 4.1描述 4.2 应用 五、工作空间查询解读 5.1 模板解读 5.2 请求转换器解读 一、概要 关于geoserver的r…

ASUS/华硕幻14 2023 GA402X系列 原厂Windows11-22H2系统

安装后恢复到您开箱的体验界面&#xff0c;带原机所有驱动和软件&#xff0c;包括myasus mcafee office 奥创等。 最适合您电脑的系统&#xff0c;经厂家手调试最佳状态&#xff0c;性能与功耗直接拉满&#xff0c;体验最原汁原味的系统。 原厂系统下载网址&#xff1a;http:…

激光与相机融合标定汇总:提升融合算法的精度与可靠性(附github地址)

前言 随着科技的飞速发展&#xff0c;激光技术与相机技术的融合已成为推动智能化影像发展的重要力量。这种融合不仅提高了成像的精度和效率&#xff0c;还为相关行业带来了革命性的变革。在这篇博客中&#xff0c;我们将深入探讨激光与相机融合标定的原理及其在各个领域的应用…

@ComponentScan注解在Spring的作用

ComponentScan注解的作用是什么&#xff1f; 告知Spring扫描那些包下的类&#xff0c;可以配置includeFilters&#xff0c;excludeFilters&#xff0c;过滤某些类&#xff0c;更多内容可以具体看下此注解文件。 Spring是如何通过这个注解将类注入到Ioc容器中的&#xff1f; 请…

【数字基础设施1007】探索数字基础设施的影响:宽带政策变量数据集来了!

今天给大家分享的是国内顶级期刊2023年发表论文《数字基础设施与代际收入向上流动性——基于“宽带中国”战略的准自然实验》使用到的重要数据集——“宽带中国”政策变量数据、互联网发展指数以及工具变量&#xff08;所在城市到杭州市的球面距离和到“八纵八横”政策节点城市…

加密与安全_Java 加密体系 (JCA) 和 常用的开源密码库

文章目录 Java Cryptography Architecture (JCA)开源国密库国密算法对称加密&#xff08;DES/AES⇒SM4&#xff09;非对称加密&#xff08;RSA/ECC⇒SM2&#xff09;散列(摘要/哈希)算法&#xff08;MD5/SHA⇒SM3&#xff09; 在线生成公钥私钥对&#xff0c;RSA公私钥生成参考…

Docker Compose 入门

想象一下在服务器上运行静态页面的场景。对于这项任务&#xff0c;NGINX 服务器是一个不错的选择。我们在 static-site/index.html 路径下有一个简单的 HTML 文件&#xff1a; 通过使用 Docker&#xff0c;我们将使用以下官方镜像运行 NGINX 服务器 docker run --rm -p 8080:…

spring boot jar 启动报错 Zip64 archives are not supported

spring boot jar 启动报错 Zip64 archives are not supported 原因、解决方案问题为什么 spring boot 不支持 zip64zip、zip64 功能上的区别zip 的文件格式spring-boot-loader 是如何判断是否是 zip64 的&#xff1f; 参考 spring boot 版本是 2.1.8.RELEASE&#xff0c;引入以…

Hi3861 OpenHarmony嵌入式应用入门--中断按键

本篇讲解gpio的中断使用方式。 硬件原理图如下&#xff0c;与上一篇一样的电路 GPIO API API名称 说明 hi_u32 hi_gpio_init(hi_void); GPIO模块初始化 hi_u32 hi_io_set_pull(hi_io_name id, hi_io_pull val); 设置某个IO上下拉功能。 hi_u32 hi_gpio_set_dir(hi_gpio_…

汽车零部件制造企业如何选择合适的ESOP电子作业指导书系统

随着汽车产业的不断发展&#xff0c;汽车零部件制造企业在提高生产效率和产品质量方面面临着越来越大的挑战。为了解决这些问题&#xff0c;越来越多的汽车零部件制造企业开始采用ESOP电子作业指导书系统&#xff0c;以帮助他们管理和优化生产流程。但是&#xff0c;在选择合适…

three.js - MeshPhongMaterial材质(实现玻璃水晶球效果)

1、概念 phong网格材质&#xff1a;Mesh - Phong - Material 一种用于具有镜面高光的光泽表面的材质。 它可以模拟&#xff0c;具有镜面高光的光泽表面&#xff0c;提供镜面反射效果。 MeshPhongMaterial&#xff1a; MeshPhongMaterial是一种基于Phong光照模型的材质&#…