如何搭建JMeter分布式集群环境来进行性能测试

在性能测试中,当面对海量用户请求的压力测试时,单机模式的JMeter往往力不从心。如何通过分布式集群环境,充分发挥JMeter的性能测试能力?这正是许多测试工程师在面临高并发、海量数据时最关注的问题。那么,如何轻松搭建JMeter分布式集群环境,实现性能测试的最大化呢?

你是否也曾为测试负载过大而不知所措?你是否对JMeter的分布式集群功能充满好奇?今天,我们将详细讲解如何通过搭建JMeter分布式集群环境,帮助你轻松应对高并发、高负载的性能测试需求!

  • 分布式测试的优势
    在分布式测试环境中,多个负载机(Slave)协同工作,可以生成更高的并发量,突破单机的资源限制。

  • 真实案例
    某大型电商平台曾通过JMeter分布式集群测试,模拟上百万用户访问场景,精准定位系统瓶颈,成功避免了购物节期间的崩溃事故。

前提条件

  在开始之前,请确保满足以下前提条件:

  ·确保 JMeter 能够访问待测试的服务器(可以通过虚拟机上的 curl 命令来检查连通性),如果无法访问,你可能需要调研当前环境是否能够用来作为压力源;

  · 确保所有系统上使用相同版本的 JMeter(我们当前使用的是 5.6.3)。混用不同版本可能无法正常工作;

  · 确保系统上的防火墙已禁用或正确打开了相关端口;

  概念

  控制节点:运行 jmeter-client 的系统,它控制测试。该系统可以是你的笔记本电脑(需要先打开防火墙)或虚拟机。

  工作节点:运行 jmeter-server 的系统,它接收来自 jmeter-client 的指令并向目标系统发送请求,通常是虚拟机。

  目标:我们计划进行压力测试的 Web 服务器。

  安装

  对于 MacOS

  使用 Homebrew 安装 JMeter,并通过 jmeter --version 命令验证安装:

 brew install jmeterjmeter --version

  在我编写本文时,使用的版本是 5.6.3。

  对于 Ubuntu20

  不要 使用 apt install jmeter 命令安装 JMeter,因为 apt 安装的版本已过时(2.13),加载 .jmx 文件将会报错从而无法正常工作。

  手动安装:

  1. 在 VM 上安装 JDK:

  sudo apt install openjdk-11-jre-headless`

  2. 从 https://jmeter.apache.org/download_jmeter.cgi 下载压缩包文件(通过你的 笔记本电脑),然后将其上传至 VM。

  3. 使用 scp/rsync 上传至虚拟机,然后解压最新的 JMeter 压缩包。在笔记本电脑上输入以下命令(请记得修改目标目录):

  rsync -avz apache-jmeter-5.6.3/ <remote-host>:/path/to/place

  4. 将文件移动至正确位置并修改 PATH 环境变量:

  # 移动至合适的目录,比如 /opt/jmeter sudo mv /path/to/place /opt/ # 将其添加到 PATH,你可以将其写入 ~/.bashrc 文件以持久化配置 vim ~/.bashrcexport PATH=/opt/jmeter/bin:$PATH # 退出 vim 并使用 source 命令生效 source ~/.bashrc

  5. 检查版本,确保一切就绪:

  jmeter --version    

  输出结果应如下所示:

      _    ____   _    ____ _   _ _____       _ __  __ _____ _____ _____ ____     / \  |  _ \ / \  / ___| | | | ____|     | |  \/  | ____|_   _| ____|  _ \    / _ \ | |_) / _ \| |   | |_| |  _|    _  | | |\/| |  _|   | | |  _| | |_) |   / ___ \|  __/ ___ \ |___|  _  | |___  | |_| | |  | | |___  | | | |___|  _ <  /_/   \_\_| /_/   \_\____|_| |_|_____|  \___/|_|  |_|_____| |_| |_____|_| \_\ 5.6.3  Copyright (c) 1999-2024 The Apache Software Foundation

  配置

  在运行分布式模式之前,需要完成以下配置:

  在控制节点

  将服务器 IP 添加到客户端的 Properties 文件中

  在 $JMETER_HOME/bin/jmeter.properties 文件中(本文的路径是 /opt/jmeter/bin/jmeter.properties),找到名为 "remote_hosts" 的单元,添加正在运行的 JMeter 服务器的 IP 地址。可以添加多个服务器,用逗号分隔,例如:

  # Edit the line: remote_hosts=127.0.0.1 and configure as below:remote_hosts=10.0.0.1,10.0.0.2,10.0.0.3

  通过更改值并取消注释来禁用 rmi.ssl:

  server.rmi.ssl.disable=true

  同时,强烈建议将默认的 jmeter.reportgenerator.overall_granularity 值从 60 秒更改为 5 秒,以获得更好的报告体验!

  jmeter.reportgenerator.overall_granularity=5000

  否则,你的报告可能就会长成这样:


  更改此值后,上述的报告将更易读:


  在工作节点

  通过更改值并取消注释来禁用 rmi.ssl:

  server.rmi.ssl.disable=true

  然后启动 jmeter-server 以监听来自控制节点的命令:

  jmeter-server

  你应看到如下输出:

  $ jmeter-server   
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release Created remote object: UnicastServerRef2 [liveRef: [endpoint:[10.0.0.1:38803](local),objID:[-7d9e7ab6:1916e54ddb2:-7fff, -6565134591293374723]]]

​​​​​​​

  使用方式

  单节点模式

  使用单节点模式进行调试,命令如下:

  jmeter -n -t <script_path> -l <results-file>

  选项 -n:以非 GUI 模式运行 JMeter

  选项 -t:要运行的 JMeter 测试(.jmx)文件

  选项 -l:指定结果日志文件

  分布式模式

  注意:

  所有服务器将运行相同的测试计划。JMeter 不会在服务器之间分配负载,每台服务器都会运行完整的测试计划。因此,如果你设置 1000 个线程并有 6 台 JMeter 服务器,你最终将注入 6000 个线程。

  如果 jmeter.properties 文件配置正确,只需在执行命令时添加 -r 选项,例如:

  jmeter -n -t <script_path> -l <results-file> -r

  选项 -r:使用 remote_hosts 属性中指定的所有节点。

  你还可以使用 -R 选项指定希望使用的节点,例如:

  jmeter -n -t <script_path> -l <results-file> -R 10.0.0.1,10.0.0.2

  此时只有 10.0.0.1 和 10.0.0.2 会参与测试,输出将如下所示:​​​​​​​

  $ jmeter -n -t demo.jmx -l result.csv -r  WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release  WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release  WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release  WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release  Creating summariser <summary>  Created the tree successfully using demo.jmx  Configuring remote engine: 10.0.0.1  Configuring remote engine: 10.0.0.2  Starting distributed test with remote engines: [10.0.0.1, 10.0.0.2] @ 2024 Aug 20 14:11:02 CST (1724134262441)  Warning: Nashorn engine is planned to be removed from a future JDK release  Remote engines have been started:[10.0.0.1, 10.0.0.2]  Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445  summary +      1 in 00:00:00 =   17.2/s Avg:     1 Min:     1 Max:     1 Err:     0 (0.00%) Active: 2 Started: 2 Finished: 0  summary +   5999 in 00:00:10 =  605.8/s Avg:     0 Min:     0 Max:     3 Err:     0 (0.00%) Active: 0 Started: 200 Finished: 200  summary =   6000 in 00:00:10 =  602.2/s Avg:     0 Min:     0 Max:     3 Err:     0 (0.00%)  Tidying up remote @ 2024 Aug 20 14:11:12 CST (1724134272743)  … end of run

  HTML 报告生成

  要从现有结果文件生成报告,使用以下命令:

  jmeter -g <result-file> -o <Path to output folder>

  或者在负载测试完成后立即生成报告,使用以下命令:

  jmeter -n -t <script_path> -l <result-file> -r -e -o <Path to output folder>

  假设你运行以下命令:

  jmeter -n -t demo.jmx -l result.csv -r -e -o report

  然后你将看到如下输出:​​​​​​​

  $ ll ./report/total 32drwxr-xr-x  4 dohong users 4096 Aug 20 14:44 ./drwx------ 10 dohong users 4096 Aug 20 14:44 ../drwxr-xr-x  5 dohong users 4096 Aug 20 14:44 content/-rw-r--r--  1 dohong users 9669 Aug 20 14:44 index.htmldrwxr-xr-x  5 dohong users 4096 Aug 20 14:44 sbadmin2-1.0.7/-rw-r--r--  1 dohong users  890 Aug 20 14:44 statistics.json

  双击打开 index.html 文件你就会得到类似如下的报告:

  左侧导航栏可以切换不同的页面查看不同的统计数据和图表,至此,分布式压测的环境搭建就全部大功告成了。

  注意事项

  ·将 jmeter.reportgenerator.overall_granularity 的值从 60000 改为 5000 强烈建议,这可以带来更好的报告体验。

  · 无需手动同步测试脚本到工作节点,JMeter 会为你完成同步,但仍需要将本地脚本同步到控制节点;

  · 使用 CLI 模式 而非 GUI 模式,避免性能下降;

  · 使用尽可能少的监听器;如果使用 -l 标志记录结果,监听器可以删除或禁用。

  · 在负载测试过程中不要使用 "查看结果树" 或 "查看表格中的结果" 监听器,它们应仅在脚本调试阶段使用,否则性能可能会下降 3 倍!

  · 如果测试需要大量数据,尤其是随机化或加密/解密数据,请将测试数据提前生成并通过 CSV 数据集读取文件,这可以避免运行时浪费资源。

在当前的技术趋势中,微服务架构云原生的普及,使得系统规模更庞大、模块更多,性能测试的重要性更加突出。JMeter分布式测试成为企业应对复杂性能测试需求的首选方案。

搭建JMeter分布式集群不仅提升了性能测试的能力,也为系统性能优化提供了更加全面的数据支撑。掌握这项技能,让你的性能测试如虎添翼

“高并发不是系统的敌人,而是推动性能优化的良师益友——关键在于你是否具备掌控它的能力!”

 

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

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

相关文章

WebRover :一个功能强大的 Python 库,用于从 Web 内容生成高质量的数据集,专为训练大型语言模型和 AI 应用程序而设计。

2024-11-30 &#xff0c;由Area-25团队开发的一个专门用于生成高质量网络内容数据集的Python库。该数据集旨在为大型语言模型&#xff08;LLM&#xff09;和人工智能应用的训练提供丰富的数据资源。 数据集地址&#xff1a;WebRover Dataset|自然语言处理数据集|AI模型训练数据…

计算机毕业设计hadoop+spark民宿推荐系统 民宿数据分析可视化大屏 民宿爬虫 民宿大数据 知识图谱 机器学习 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

云原生数据库 PolarDB

PolarDB 是阿里云推出的一款云原生数据库&#xff0c;旨在为企业提供高性能、高可靠性的数据库解决方案。它基于云计算环境设计&#xff0c;特别适用于云上的大规模数据处理和存储需求。PolarDB 是一种兼具关系型数据库&#xff08;RDS&#xff09;和分布式数据库特性的新型数据…

zookeeper在确认config无误后仍处于standalone模式的解决方法

jps查看是否有QuorumPeerMain进程 停止服务后该进程仍然存在&#xff0c;输入&#xff1a; ps -ef | grep QuorumPeerMain | grep -v grep | awk {print $2} | xargs kill 之后再启动一次进程 bin/zkServer.sh start 查看状态 bin/zkServer.sh status 发现报错解决&#…

mac中全局 flutter fvm 控制版本遇到的不生效问题解决

1、下载 dart pub global activate fvm 或者 brew tap leoafarias/fvmbrew install fvm fvm use 3.22.1 上面的每次运行都需要加fvm flutter 我觉得麻烦 我期望的是修改全局的 那么就需要使用到fvm global 命令 如&#xff1a; fvm global 3.24.0 但是我发现flutter --vers…

eltable el-table 横向 滚动条常显

又遇到了难受的问题&#xff0c;el-table嵌入在一个div里面&#xff0c;结果因为内容太多,横向、纵向我都得滚动查看&#xff01; 结果发现横向滚动时只能让它纵向触底后才能进行横向操作&#xff0c;这就很变态&#xff0c;明显不符合用户操作习惯。如下图&#xff1a; 要先纵…

【webApp之h5端实战】项目基础结构搭建及欢迎页面的实现

这是一个实战项目的webapp,主要是使用原生js/css/html来实现我们的业务。预览下面的实战效果,我们将会从0到1实现这个系列的项目。包括大量的原生js知识,css3动画的开发,以及页面的交互实现。 效果预览 项目准备工作 封装的工具类,用于获取原生dom节点,处理原生dom事件的…

【AI模型对比】Kimi与ChatGPT的差距:真实对比它们在六大题型中的全面表现!

文章目录 Moss前沿AI语义理解文学知识数学计算天文学知识物理学知识英语阅读理解详细对比列表总结与建议 Moss前沿AI 【OpenAI】获取OpenAI API Key的多种方式全攻略&#xff1a;从入门到精通&#xff0c;再到详解教程&#xff01;&#xff01; 【VScode】VSCode中的智能AI-G…

[go-redis]客户端的创建与配置说明

创建redis client 使用go-redis库进行创建redis客户端比较简单&#xff0c;只需要调用redis.NewClient接口创建一个客户端 redis.NewClient(&redis.Options{Addr: "127.0.0.1:6379",Password: "",DB: 0, })NewClient接口只接收一个参数red…

图形开发基础之在WinForms中使用OpenTK.GLControl进行图形绘制

前言 GLControl 是 OpenTK 库中一个重要的控件&#xff0c;专门用于在 Windows Forms 应用程序中集成 OpenGL 图形渲染。通过 GLControl&#xff0c;可以轻松地将 OpenGL 的高性能图形绘制功能嵌入到传统的桌面应用程序中。 1. GLControl 的核心功能 OpenGL 渲染上下文&…

shell编程7,bash解释器的 for循环+while循环

声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&#…

【Java-数据结构篇】Java 中栈和队列:构建程序逻辑的关键数据结构基石

我的个人主页 我的专栏&#xff1a;Java-数据结构&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;点赞❤ 收藏❤ 一、引言 1. 栈与队列在编程中的角色定位 栈和队列作为两种基本的数据结构&#xff0c;在众多编程场景中都有着独特的地位。它们为数据的有序…

springboot vue 会员收银系统 (13) 欢迎页优化 开源

前言 完整版演示 http://120.26.95.195/ 开发版演示 http://120.26.95.195:8889/ 在之前的开发进程中&#xff0c;我们完成了会员系统的基本功能 基本完成了收银功能 今天我们对欢迎页进行优化。 1.信息分区 仪表盘将信息分为几个主要区域&#xff0c;包括关键数据统计区、功…

在windows系统用Anaconda搭建运行PyTorch识别安全帽项目的环境

一.背景 我期望基于开源项目实现工业场景中安全帽识别。之前的各种尝试&#xff0c;也不太顺利。发现安全帽识别的开源项目使用的是基于Python的PyTorch实现训练的。上一篇写了Python的安装&#xff0c;发现后续安装其他的并不方便。我为什么选择&#xff0c;下面再详细说原因。…

Spring事务的一道面试题

每次聊起Spring事务&#xff0c;好像很熟悉&#xff0c;又好像很陌生。本篇通过一道面试题和一些实践&#xff0c;来拆解几个Spring事务的常见坑点。 原理 Spring事务的原理是&#xff1a;通过AOP切面的方式实现的&#xff0c;也就是通过代理模式去实现事务增强。 具体过程是&a…

AI换脸facefusion 3.0.1安装及其使用方法(源代码安装)

文章目录 1. 本文简介2. 软件环境准备软件下载及安装代码下载 3. Conda环境4. 加速环境5. 依赖安装6. 图片测试 今天给大家分享换脸facefusion 3.0.1使用方法。不仅可以对单张图片换脸&#xff0c;也可以对视频换脸。如果是单张图片的话&#xff0c;没有GPU速度也很快&#xff…

在CentOS上无Parallel时并发上传.wav文件的Shell脚本解决方案

在CentOS上无Parallel时并发上传.wav文件的Shell脚本解决方案 背景概述解决方案脚本实现脚本说明使用指南注意事项在CentOS操作系统环境中,若需并发上传特定目录下的.wav文件至HTTP服务器,而系统未安装GNU parallel工具,我们可通过其他方法实现此需求。本文将介绍一种利用Sh…

极兔速递开放平台快递物流查询API对接流程

目录 极兔速递开放平台快递物流查询API对接流程API简介物流查询API 对接流程1. 注册用户2. 申请成为开发者3. 企业认证4. 联调测试5. 发布上线 签名机制详解1. 提交方式2. 签名规则3. 字段类型与解析约定 物流轨迹服务极兔快递单号查询的其他方案总结 极兔速递开放平台快递物流…

Linux命令行解释器的模拟实现

欢迎拜访&#xff1a;羑悻的小杀马特.-CSDN博客 本篇主题&#xff1a;Linux命令行解释器 制作日期&#xff1a;2024.12.04 隶属专栏&#xff1a;linux之旅 本篇简介&#xff1a; 主线带你用ubuntu版系统步步分析实现基础版本的shell&#xff1b;比如支持重定向操作&#xff0…

微信 创建小程序码-有数量限制

获取小程序码&#xff1a;小程序码为圆图&#xff0c;有数量限制。 目录 文档 接口地址 功能描述 注意事项 请求参数 对接 获取小程序码 调用获取 小程序码示例 总结 文档 接口地址 https://api.weixin.qq.com/wxa/getwxacode?access_tokenaccess_token 功能描述 …