使用Docker进行Jmeter分布式搭建

        大家好,随着技术的不断发展,对性能测试的要求也日益提高。在这样的背景下,如何利用 Docker 来巧妙地搭建 Jmeter 分布式成为了关键所在。现在,就让我们开启这场探索之旅,揭开其神秘的面纱。前段时间给大家分享了关于 Locust 性能测试相关的知识,其中就有 Locust 与 Jmeter 两关工具的对比,各有优劣,大家可以根据自己的业务和场景,选择更适合自己的工具,毕竟,工具只是手段,测试思路才是重中之重,关于 Locust 脚本编写与分布式搭建,大家可以参考:

使用Python3 + Locust进行性能测试

基于Docker + Locust的数据持久化性能测试系统

一、Jmeter分布式介绍

        在工作中,我们经常需要对一些关键接口进行高 QPS 的压测。JMeter 是使用 Java 语言开发的,当创建一个线程(虚拟用户)时,JVM 会默认为每个线程分配 1M 的堆栈内存空间。由于单台试压机的配置限制,很难实现过高的并发。因此,我们可以通过实现 JMeter 的分布式,整合多台主机的硬件资源,从而同时对被测试接口进行压力测试。

在 Jmeter 分布式测试环境中,有两个非常重要的角色:Master 和 Slaves

Master:

也被称为控制机或主节点,主要负责以下任务:

  • 发送测试脚本:master 节点将压测脚本发送到 slaves 节点上。
  • 控制测试执行:master 节点可以启动、停止测试,并监控测试的进度。
  • 汇总测试结果:slaves 节点将测试结果返回给 master 节点,master 节点对这些结果进行汇总和分析。

Slaves:

也被称为从节点或负载机,主要负责执行压测任务,它们的具体职责包括:

  • 接收测试脚本:slaves 节点从 master 节点接收压测脚本。
  • 执行测试:slaves 节点按照接收到的脚本执行压测操作,向目标系统发送请求。
  • 返回测试结果:测试结束后,slaves 节点将测试结果返回给 master 节点。

Jmeter分布式的优缺点:

优点:

  • 可扩展性强:能够通过增加 slaves 节点轻松提升施压能力,以模拟更大规模的并发量。
  • 资源利用高效:可以充分利用多台机器的资源来执行压测任务。
  • 更真实模拟场景:可以更接近实际的高并发场景,对系统性能进行更全面的评估。

缺点:

  • 配置相对复杂:需要对 master 和 slaves 节点进行一系列的配置和管理工作。
  • 网络因素影响:网络情况可能对测试结果产生一定干扰,比如延迟、丢包等。
  • 环境一致性要求高:要求各个节点的环境尽可能保持一致,否则可能影响结果的准确性。

使用Jmeter分布式的注意事项:

  • 压力测试瓶颈:压力测试瓶颈大都在带宽上面,需要保证压力机的带宽要比服务器的带宽高,不然压力上不去。
  • 时间同步:需要保证 master 和 slaves 之间的时间同步。
  • 防火墙问题:关闭防火墙。
  • 线程数设置:在设定脚本线程数目时,需要除以执行机个数,设定并发线程数。

二、下载Jmeter Master与Slave镜像

docker pull runcare/jmeter-master
docker pull runcare/jmeter-slave

分别执行上述命令进行master与slaves镜像下载,如下图:

下载完成后,查看镜像:

三、创建虚拟网络

        Docker 虚拟网络是 Docker 为应用程序创造的虚拟环境的一部分,它能让应用从宿主机操作系统的网络环境中独立出来,形成容器自有的网络设备、IP 协议栈、端口套接字、IP 路由表、防火墙等与网络相关的模块。

Docker 虚拟网络的作用主要有以下几点:

  • 提供网络隔离:Docker 虚拟网络为容器提供了独立的网络环境,使容器之间的网络通信与外部网络隔离,增强了网络安全性。
  • 实现容器间通信:通过 Docker 虚拟网络,容器可以在不同的宿主机上进行通信,形成一个跨主机的分布式应用系统。
  • 简化网络配置:Docker 虚拟网络可以自动为容器分配 IP 地址和网络配置,减少了手动配置网络的复杂性。
  • 提高网络性能:Docker 虚拟网络可以优化网络性能,减少网络延迟和提高带宽利用率。
  • 增强应用的可移植性:由于容器的网络环境是由 Docker 虚拟网络提供的,因此应用程序在不同的环境中运行时,不需要担心网络配置的差异,增强了应用的可移植性。

在 Jmeter 分布式中使用 Docker 虚拟网络具有以下一些好处:

  • 网络隔离性更好:确保不同的 Jmeter 组件(如 master 和 slaves)之间的网络通信相对独立和稳定,减少外界干扰。
  • 灵活配置网络环境:可以根据测试需求定制网络拓扑、IP 分配等,更方便地模拟各种复杂网络场景。
  • 增强资源管控:便于对分布式测试中涉及的网络资源进行集中管理和监控,提高资源利用效率。
  • 环境一致性:更容易保证各个节点处于相同的网络环境中,避免因网络差异导致测试结果不准确。
  • 便于迁移和扩展:整个测试架构可以较为便捷地在不同环境中迁移和扩展,适应不同测试场景的要求。

创建虚拟网络,名称为 jmeter_net。

docker network create jmeter_net

创建完成后,查看虚拟网络列表

docker network ls

四、启动Jmeter Slaves节点

假如有三台服务器作为 Jmeter 的 Slave 节点,可以分别在每台服务器上面启动一个 Slave 容器。

docker run -it -d --name slave_01 --network jmeter_net runcare/jmeter-slave
docker run -it -d --name slave_02 --network jmeter_net runcare/jmeter-slave
docker run -it -d --name slave_03 --network jmeter_net runcare/jmeter-slave

命令解释:

docker run:这是 Docker 命令,用于创建并运行一个新的容器。
-it:表示以交互模式运行容器,并打开一个终端连接到容器内部。
-d:表示在后台运行容器。
--name slave_01:为容器指定一个名称,这里将容器命名为slave_01。
--network jmeter_net:将容器连接到名为jmeter_net的虚拟网络。
runcare/jmeter-slave:指定要运行的镜像,这里使用的是runcare/jmeter-slave镜像。

本文中使用一台服务器作为演示,执行上述命令后,如下图:

查看容器运行状态:

Jmeter 的 Slave 容器启动成功。

五、查看Slaves节点的IP地址

通过 Slaves 容器日志查看所有 Slave 的IP地址:

docker logs slave_01
docker logs slave_02
docker logs slave_03

如下图:

通过查看日志,可以知道三个 Slaves 容器的IP地址分别是:

172.19.0.2、172.19.0.3、172.19.0.4

六、准备一个Jmeter脚本

此处编写一个比较简单的脚本。

保存脚本名称 test_baidu.jmx,并存放在 /root/jmx_file_dir 目录下,下面我们会将 /root/jmx_file_dir 这个目录挂在到 Jmeter Master节点的容器内部。

七、启动Jmeter Master节点执行测试

下面这条命令主要用于启动 Jmeter 分布式的 Master 节点。

result=`date +"%Y%m%d%H%M%S"` && docker run --rm --network jmeter_net -v /root/jmx_file_dir:/data runcare/jmeter-master jmeter -n -t /data/test_baidu.jmx -l /data/$result.jtl -j /data/$result.log -e -o /data/$result -R 172.19.0.2,172.19.0.3,172.19.0.4

命令解释:

result=date +"%Y%m%d%H%M%S":获取当前日期和时间并以特定格式(年、月、日、时、分、秒)赋值给变量 result`。
docker run --rm:运行一个 Docker 容器,--rm 表示容器在执行结束后自动删除。
--network jmeter_net:指定容器连接到名为 jmeter_net 的网络。
-v /root/jmx_file_dir:/data:进行卷挂载,将本地的 /root/jmx_file_dir 目录映射到容器内的 /data 目录。
runcare/jmeter-master:指定要运行的镜像为 runcare/jmeter-master。
jmeter -n -t /data/test_baidu.jmx -l /data/$result.jtl -j /data/$result.log -e -o /data/$result -R 172.19.0.2,172.19.0.3,172.19.0.4:这是在容器内执行的具体操作,使用 jmeter 工具进行相关测试,指定了测试计划文件、结果文件、日志文件等,并指定了要报告到的 IP 地址(Slaves节点的IP地址)。

启动后,master 节点会执行以下操作:

  1. 拷贝 jmx 文件并分发:master 节点会将本地的 jmx 文件(测试计划文件)拷贝并分发到连接到指定网络(jmeter_net)的所有 slave 节点上;
  2. 执行测试脚本:slave 节点拿到脚本后,以命令行模式启动并执行脚本。由于每个 slave 机器拿到的脚本都是一样的,所以如果 jmx 脚本为 50 个线程跑 3 分钟,那么实际并发就是 50×3=150 个线程并发跑 3 分钟。
  3. 收集结果并汇总:在执行过程中,slave 节点会将执行获得的数据结果传回 master 节点,master 节点收集所有 slave 节点的信息并汇总,这样 master 节点上就存在一份所有 slave 节点汇总的数据结果。

执行命令截图如下:

此时正在进行测试,测试完成后如下:

八、查看测试结果

此时,进入到 /root/jmx_file_dir 目录下,会有一个以当前时间命名的目录,里面存放的就是报告。

进入目录后,查看目录内容,有个 index.html 文件。

打开 index.html 可以看到具体的测试报告,如下图:

后续会继续跟大家分享 Jmeter 的使用和一些常用的插件,以及如何进行数据持久化,感谢大家的支持~~

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

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

相关文章

通信指挥类装备(多链路聚合设备)-应急通信指挥解决方案

现场通信指挥系统是一种功能全面的便携式音视频融合指挥通信平台,可实现现场应急救援指挥、多种通信手段融合、现场通信组网等功能,是现场指挥系统的延伸。 多链路聚合设备,是一款通信指挥类装备,具有 4G/5G,专网&…

Free RTOS中Semaphore(二值信号量)的使用介绍

目录 概述 1 使用STM32Cube 配置信号量 1.1 引子 1.2 STM32Cube中配置FreeRTOS 1.3 STM32Cube生成Project 2 cmsis_os中信号量接口函数 2.1 函数:osSemaphoreNew 2.2 函数:osSemaphoreGetName 2.3 函数:osSemaphoreAcquire 2.4 函数…

设计模式:外观模式(Facade)

设计模式:外观模式(Facade) 设计模式:外观模式(Facade)模式动机模式定义模式结构时序图模式实现在单线程环境下的测试在多线程环境下的测试模式分析优缺点适用场景应用场景模式扩展参考 设计模式&#xff1…

【Open AI】GPT-4o深夜发布:视觉、听觉跨越式升级

北京时间5月14日1点整,OpenAI 召开了首场春季发布会,CTO Mira Murati 在台上和团队用短短不到30分钟的时间,揭开了最新旗舰模型 GPT-4o 的神秘面纱,以及基于 GPT-4o 的 ChatGPT,均为免费使用。 本文内容来自OpenAI网站…

人工智能|深度学习——YOLOV8结构图

YoloV8相对于YoloV5的改进点: Replace the C3 module with the C2f module.Replace the first 6x6 Conv with 3x3 Conv in the Backbone.Delete two Convs (No.10 and No.14 in the YOLOv5 config).Replace the first 1x1 Conv with 3x3 Conv in the Bottleneck.Use…

【图神经网络——消息传递】

消息传递机制 画图先:导包:画图: 实现消息传递:例子一:例子二: 画图先: 导包: import networkx as nx import matplotlib.pyplot as plt import torch from torch_geometric.nn im…

Linux操作系统最著名的两大系列Red Hat和Debian

Linux操作系统可以根据其背后的项目或社区分为不同的系列,其中最著名的两大系列是Red Hat系列和Debian系列。 1.著名的两大系列是Red Hat和Debian Red Hat系列: Red Hat Enterprise Linux (RHEL):这是Red Hat公司推出的企业级操作系统&#…

【LAMMPS学习】十、LAMMPS辅助工具(1)

10. 辅助工具 LAMMPS 被设计为用于执行分子动力学计算的计算内核。设置和分析模拟通常需要额外的预处理和后处理步骤。此类工具的列表可以在 LAMMPS 网页上的以下链接中找到: 前/后处理 外部 LAMMPS 软件包和工具 Pizza.py 工具包 Pizza.py 的最后一个链接是桑迪…

CTFshow misc

第一题1 打开图片直接就是flag 第二题0 放入010发现文件头有png 更换后缀 获得flag 第三题1 下载之后发现是bpg后缀 用在线工具转换为png获得flag 第四题 0 把六个文件后缀都改为png即可获得flag

Visual Studio Code 扩展程序Text Edits

需求 比如把Scarzombie_Monster全部转换为大写或者小写 安装 Text Edits 直接搜索安装即可 使用 假如要把Scarzombie_Monster全部转为大写,选中右键选中 To Upper Case或者直接快捷键shiftAltU即可

DHCP动态主机配置协议

DHCP概述 DHCP是什么 DHCP:Dynamic Host Configuration Protocol:动态主机配置协议DHCP是一种集中对用户IP地址进行动态管理和配置的技术 DHCP作用: 作用:实现IP地址的动态分配和集中管理优势:避免手工配置IP地址&…

微信小程序的自定义组件

一、创建自定义组件 (1)定义: 把页面重复的代码部分封装成为一个自定义组件,以便在不同的页面中重复使用,有助于代码的维护。 (2)组成: 自定义组件的组成:json文件&a…

Elasticsearch 搜索引擎实现对文档内容进行快速检索(保姆级教程)

本文主要讲解ES如何从提取文档中提取内容(word、pdf、txt、excel等文件类型),实现快速检索文档内容实现。 特别说明一下,为什么用7.10.0版本,因为在项目中除了精确匹配的要求,也会有模糊查询(关…

Android 异常开机半屏重启代码分析

Android 的稳定性是 Android 性能的一个重要指标,它也是 App 质量构建体系中最基本和最关键的一环;如果应用经常崩溃,或者关键功能不可用,那显然会对我们的留存产生重大影响所以为了保障应用的稳定性,我们首先应该树立…

Zynq UltraScale+ RFSoC 配置存储器器件

Zynq UltraScale RFSoC 配置存储器器件 下表所示闪存器件支持通过 Vivado 软件对 Zynq UltraScale RFSoC 器件执行擦除、空白检查、编程和验证等配置操 作。 本附录中的表格所列赛灵思系列非易失性存储器将不断保持更新 , 并支持通过 Vivado 软件对其中所列…

【C语言】6.C语言VS实用调试技巧(2)

文章目录 6.调试举例17.调试举例28.调试举例3&#xff1a;数组9.编程常⻅错误归类9.1 编译型错误9.2 链接型错误9.3 运⾏时错误 – 6.调试举例1 求 1!2!3!4!…10! 的和。 int main() {int n 0;int i 0;int ret 1;int sum 0;for (n 1; n < 3; n) {for (i 1; i < …

knife4j案例

1.导入 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId> </dependency>2.在配置类中加入 knife4j 相关配置并设置静态资源映射&#xff08;否则接口文档页面无法访问&#xff…

就这?轻轻松松在RK356X Android11适配ML307R Cat.1模组

开源鸿蒙硬件方案领跑者 触觉智能 Industio 本文基于IDO-SXB3568主板&#xff0c;介绍Android11平台上适配中移物联ML307R Cat.1 4G模组的方法。该方法适用于触觉所有RK356X的主板。 IDO-SXB3568是触觉智能推出的RK3568行业主板&#xff0c;预计6月上旬正式上架售卖。该行业主…

鸿蒙OS开发:【一次开发,多端部署】(应用UX设计原则)

应用UX设计原则 设计原则 当为多种不同的设备开发应用时&#xff0c;有如下设计原则&#xff1a; 差异性 充分了解所要支持的设备&#xff0c;包括屏幕尺寸、交互方式、使用场景、用户人群等&#xff0c;对设备的特性进行针对性的设计。 一致性 除了要考虑每个设备的特性…

54.指针

目录 一.什么是指针&#xff1f; 二&#xff0e;定义一个指针变量 三&#xff0e;指针变量类型 四&#xff0e;取地址运算符& 五.取值运算符* 六.视频教程 一.什么是指针&#xff1f; 口语中的指针一般指指针变量&#xff0c;指针变量存放的是一个地址。普通变量存放…