巧用docker+jmeter快速实现分布式百万级并发

分享背景

碰到的问题:

一个JMeter实例可能无法产生足够的负载来对你的应用程序进行压力测试~

解决办法:

1、修改jmeter配置文件里的内存堆
[图片]

2、引入jmeter分布式压测
[图片]

带来的问题:

如果我们要做分布式负载测试–我们需要1个主机和N个从机来产生巨大的负载。每台JMeter从机都需要安装特定版本的Java和JMeter。特定的端口应被打开,运行环境要一样,JMeter服务器应运行,准备并等待主机发送指令。
手动设置一些机器可能看起来很容易。如果我们要为50台、100台、1000台机器做这件事呢?想象一下,如果我们将来需要在所有的机器上升级JMeter版本,会发生什么?这就是docker出现的原因。

分布式介绍

一个JMeter实例将能够控制许多其他的远程JMeter实例,并对你的应用程序产生更大的负载。JMeter使用Java RMI[远程方法调用]来与分布式网络中的对象进行交互
[图片]

通过在多台机器上运行JMeter的多个实例作为服务器,我们可以根据需要产生大量的负载。
[图片]

Docker

docker在这里有什么用?

Docker有点像一个虚拟机。但与虚拟机不同的是,Docker不是创建一个完整的虚拟操作系统,而是允许应用程序使用与它们所运行的系统相同的Linux内核。这使性能得到了极大的提升,并减少了应用程序的大小

Docker是一个基础设施的管理者。它能够将一个软件和它的所有依赖物打包成一个容器来运行。你可以将打包成docker镜像的软件部署到任何安装了docker的机器上。它将软件与硬件分离。

我们要做的

我们首先要创建jmeter的镜像,收集搭建jmeter镜像的材料。
如何收集:
这里就引入了dockerfile的概念
我们需要在一个叫做Dockerfile的文件中设置JMeter分布式测试的整个基础设施

编写 Dockerfile

[图片]

由于我们要制作的是JMeter分布式镜像master和slave,所以,需要两个 Dockerfile

创建/master/Dockerfile 文件。

# openjdk 8
FROM openjdk:8# 更新版本1
MAINTAINER defnngj<defnngj@gmail.com>ARG JMETER_VERSION="5.2.1"
ENV JMETER_HOME /opt/apache-jmeter-$JMETER_VERSION
ENV JMETER_DOWNLOAD_URL  https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz
ENV SSL_DISABLED trueRUN mkdir -p /tmp/dependencies  \&& curl -L --silent $JMETER_DOWNLOAD_URL >  /tmp/dependencies/apache-jmeter-$JMETER_VERSION.tgz  \&& mkdir -p /opt  \&& tar -xzf /tmp/dependencies/apache-jmeter-$JMETER_VERSION.tgz -C /opt  \&& rm -rf /tmp/dependencies# TODO: plugins (later)
# && unzip -oq "/tmp/dependencies/JMeterPlugins-*.zip" -d $JMETER_HOME# Set global PATH such that "jmeter" command is found
ENV PATH $PATH:$JMETER_HOME/binVOLUME ["/data"]WORKDIR  $JMETER_HOMERUN sed 's/#server.rmi.ssl.disable=false/server.rmi.ssl.disable=true/g' ./bin/jmeter.properties > ./bin/jmeter_temp.properties
RUN mv ./bin/jmeter_temp.properties ./bin/jmeter.properties

创建/slave/Dockerfile 文件

# openjdk 8
FROM openjdk:8# 更新版本1
MAINTAINER defnngj<defnngj@gmail.com>ARG JMETER_VERSION="5.2.1"
ENV JMETER_HOME /opt/apache-jmeter-$JMETER_VERSION
ENV JMETER_DOWNLOAD_URL  https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz
ENV SSL_DISABLED trueRUN mkdir -p /tmp/dependencies  \&& curl -L --silent $JMETER_DOWNLOAD_URL >  /tmp/dependencies/apache-jmeter-$JMETER_VERSION.tgz  \&& mkdir -p /opt  \&& tar -xzf /tmp/dependencies/apache-jmeter-$JMETER_VERSION.tgz -C /opt  \&& rm -rf /tmp/dependencies# TODO: plugins (later)
# && unzip -oq "/tmp/dependencies/JMeterPlugins-*.zip" -d $JMETER_HOME# Set global PATH such that "jmeter" command is found
ENV PATH $PATH:$JMETER_HOME/binVOLUME ["/data"]WORKDIR $JMETER_HOMEEXPOSE 1099 60001ENTRYPOINT jmeter-server -Dserver.rmi.localport=60001 -Dserver_port=1099 \-Jserver.rmi.ssl.disable=$SSL_DISABLED

编写构建脚本

其实,有 Dockerfile 文件就可以用 docker build 进行构建了。为了简化操作,我们可以进一步创建 build.sh 来实现构建脚本。

创建/master/build.sh 文件

JMETER_VERSION=${JMETER_VERSION:-"5.5"}# Example build line
docker build  --build-arg JMETER_VERSION=${JMETER_VERSION} -t "defnngj/jmeter-master:${JMETER_VERSION}" .

–build-arg 设置构建时变量
-t 设置镜像名 + TAG。

  • 构建 master 镜像
$ bash ./build.sh

创建/slave/build.sh 文件

JMETER_VERSION=${JMETER_VERSION:-"5.5"}# Example build line
docker build  --build-arg JMETER_VERSION=${JMETER_VERSION} -t "defnngj/jmeter-slave:${JMETER_VERSION}" .
  • 构建 slave 镜像
$ bash ./build.sh

查看镜像

$ docker imagesREPOSITORY              TAG    IMAGE ID       CREATED          SIZE
defnngj/jmeter-slave    5.5    9e5c9141fcc4   19 minutes ago   672MB
defnngj/jmeter-master   5.5    c4a2eab57be7   19 minutes ago   673MB

如何启动容器:

启动master容器:
sudo docker run -dit --name master defnngj/jmeter-master /bin/bash
启动slave容器:
sudo docker run -dit --name slave01 defnngj/jmeter-slave /bin/bash
sudo docker run -dit --name slave02 defnngj/jmeter-slave /bin/bash
sudo docker run -dit --name slave03 defnngj/jmeter-slave /bin/bash

运行下面的命令可以看到所有正在运行的容器和打开的端口等:
sudo docker ps –a
在这里插入图片描述
运行下面的命令来获得这些容器的IP地址列表:
sudo docker inspect --format ‘{{ .Name }} => {{ .NetworkSettings.IPAddress }}’ $(sudo docker ps -a -q)
在这里插入图片描述
从主机复制任何文件到docker容器 - 你可以发出以下命令。例如:我把测试复制到我的JMeter主容器中。这个命令将把我的本地jmeter测试(docker-test.jmx)复制到主容器的这个路径中:
/jmeter/apache-jmeter-5.2.1/bin/docker-test.jmx
sudo docker exec -i master sh -c ‘cat > /jmeter/apache-jmeter-5.2.1/bin/docker-test.jmx’ < docker-test.jmx

进入到master中运行脚本:
sudo docker exec -it master /bin/bash

单机运行:
jmeter -n -t sample-test/sample-test.jmx
在这里插入图片描述

多机运行:
我们只需要添加-R[slave01,slave02,slave03]
jmeter -n -t sample-test/sample-test.jmx -R172.17.0.5,172.17.0.6,172.17.0.7
在这里插入图片描述
生成报告的完整命令:
jmeter -n -t XXX.jmx -l result.jtl -e -o html
-l 表示生成指定的报告文件,一般使用jtl格式来保存,因为jtl文件可以使用jmeter任意监听器打开;
-e -o : (*注意:测试报告的文件夹必须是空文件夹)
-e 表示生成html报告;
-o 表示html报告输出路径;

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

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

相关文章

企业数据挖掘建模平台极简建模流程

泰迪智能科技企业数据挖掘建模平台是企业自主研发&#xff0c;面向企业级用户的快速数据处理构建模型工具。平台底层算法基于R语言、Python、Spark等引擎&#xff0c;使用JAVA语言开发&#xff0c;采用 B/S 结构&#xff0c;用户无需下载客户端&#xff0c;可直接通过浏览器进…

GAT1399协议分析(7)--pycharm anaconde3 配置pyside2

一、安装pyside2 pip install pyside2 二、配置qtdesigner File->Settings->Tools->External tools 点击添加,添加QtDesigner, 注意designer.exe路径,需要在虚拟环境下。 三、添加pySide2 File->Settings->Tools->External tools 点击添加,添加PyS…

高效内容分发:海外短剧推广平台的流媒体传输技术挑战与解决

随着海外短剧市场的蓬勃发展&#xff0c;如何高效地将短剧内容分发给全球观众成为了推广平台必须面对的一大挑战。在这一过程中&#xff0c;流媒体传输技术起着至关重要的作用。然而&#xff0c;由于网络环境的复杂性和多样性&#xff0c;流媒体传输面临着带宽限制、延迟等诸多…

前端--导出

这边记录我们公司后端做的导出接口和前端是如何对接的 这边的技术栈是&#xff1a; 1&#xff1a; react 2&#xff1a; fetch 第一步&#xff1a;简单封装--导出界面 import { DrawerForm } from ant-design/pro-components; import { CloseOutlined } f…

iOS 之homebrew ruby cocoapods 安装

cocoapods安装需要ruby&#xff0c;更新ruby需要rvm&#xff0c;下载rvm需要gpg&#xff0c;下载gpg需要homebrew&#xff0c;所以安装顺序是homebrew->gpg->rvm->ruby-cocoapods Rvm 官网&#xff1a; RVM: Ruby Version Manager - RVM Ruby Version Manager - Docum…

Linux 35.5 + JetPack v5.1.3@ ego-planner编译安装

Linux 35.5 JetPack v5.1.3 ego-planner编译安装 1. 源由2. 编译&安装Step 1&#xff1a;依赖库安装Step 2&#xff1a;建立工程Step 3&#xff1a;编译工程Step 4&#xff1a;安装工程 3. 问题汇总3.1 planner/plan_env - OpenCV3.2 uav_simulator/local_sensing - CUDA优…

《Navi日语社》App:日语学习与翻译的智能助手,支持日文OCR识别提取文字,无需打字对着说话就能翻译的日语语音翻译工具!

在全球化的今天&#xff0c;掌握一门外语已经成为许多人的必备技能。尤其是日语&#xff0c;不仅在学术、商务领域有着广泛的应用&#xff0c;也是许多旅行者和动漫爱好者的心头好。《Navi日语社》App&#xff0c;作为一款专为日语学习者和翻译需求者设计的移动应用&#xff0c…

Zookeeper复习

一、入门 1、概念 zookeeper文件系统通知机制 2.特点 1&#xff09;、一个领导者&#xff0c;多个跟随者组成的集群。 2&#xff09;、集群中只要有半数以上存活机制&#xff0c;zookeeper集群能正产服务。zk适合安装奇数台。 3&#xff09;、全局数据一致&#xff1a;每…

华为鸿蒙开发-鸿蒙基于ARKTS开发之启动模式

前言 鸿蒙生态取得爆发式增长&#xff01; 截至3月底&#xff0c;已有超4000个应用加入鸿蒙生态。 而在今年1月中旬&#xff0c;华为刚宣布HarmonyOS NEXT鸿蒙星河版面向开发者开放申请&#xff0c;这一版本鸿蒙系统也被称为“纯血鸿蒙”。 当时&#xff0c;华为宣布首批200…

2. QGis二次开发项目实践一之技术实现

前言 本文描述了QGis二次开发项目实践一的涉及到的技术点涉及到的QGis技术点如下 矢量图层加载显示矢量图层导出dxf矢量图层合并 代码描述 矢量图层加载显示 矢量图层加载显示在以前的教程中已有详细说明&#xff0c;请参考以下链接 5.1 加载矢量图层(ogr,gpx)5.2 加载矢量…

【微服务】使用kubekey部署k8s多节点及kubesphere

kubesphere官方部署文档 https://github.com/kubesphere/kubesphere/blob/master/README_zh.md kubuctl命令文档 https://kubernetes.io/zh-cn/docs/reference/kubectl/ k8s资源类型 https://kubernetes.io/zh-cn/docs/reference/kubectl/#%E8%B5%84%E6%BA%90%E7%B1%BB%E5%9E…

python中的函数概念

一段可以被重复使用的代码。 关于函数的定义 defdefine &#xff08;定义&#xff09; def 函数名&#xff08;形参列表&#xff09;&#xff1a;形参列表中&#xff0c;可以有多个形参&#xff0c;多个形参之间使用逗号分隔&#xff0c; 关于函数的调用 &#xff08;开始完…

Transformer 论文重点

摘要 提出了一个 Transformer 模型&#xff0c;针对于一个机器翻译的小任务上表现结果比当时所有模型的效果都好&#xff0c;并且架构相比其它更加简单&#xff0c;后面就火到了发现什么方向都能用的地步。 介绍 循环神经网络&#xff0c;特别是长短时记忆[ 13 ]和门控循环[…

kafka-消费者-指定offset消费(SpringBoot整合Kafka)

文章目录 1、指定offset消费1.1、创建消费者监听器‘1.2、application.yml配置1.3、使用 Java代码 创建 主题 my_topic1 并建立3个分区并给每个分区建立3个副本1.4、创建生产者发送消息1.4.1、分区0中的数据 1.5、创建SpringBoot启动类1.6、屏蔽 kafka debug 日志 logback.xml1…

nginx动静分离和反向代理

一、动静分离 动静分离指的是将动态内容和静态内容分开处理。动态内容通常由后端应用程序生成&#xff0c;例如PHP、Python或Node.js&#xff0c;静态内容则包括图片、CSS、JavaScript等文件。 例子&#xff1a; #代理服务器一 server{listen 80;server_name www.dj.com;r…

夏季高温来袭|危化品如何安全储存?

《危险化学品安全管理条例》第三条 本条例所称危险化学品&#xff0c;是指具有毒害、腐蚀、爆炸、燃烧、助燃等性质&#xff0c;对人体、设施、环境具有危害的剧毒化学品和其他化学品。 随着夏天高温的来袭&#xff0c;炎热的天气对危化品储存威胁巨大&#xff0c;危化品事故也…

【C++课程学习】:C++入门(输入输出,缺省参数)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 &#x1f369;1.关于C输入输出&#xff1a; &#x1f369;2.缺省参数函数&#xff1a; 缺省参数的概…

聊聊大模型微调训练全流程的思考

前言 参考现有的中文医疗模型&#xff1a;MedicalGPT、CareGPT等领域模型的训练流程&#xff0c;结合ChatGPT的训练流程&#xff0c;总结如下&#xff1a; 在预训练阶段&#xff0c;模型会从大量无标注文本数据集中学习领域/通用知识&#xff1b;其次使用{有监督微调}(SFT)优化…

TensorBoard在pytorch训练过程中如何使用,及数据读取问题解决方法

TensorBoard 模块导入日志记录文件的创建训练中如何写入数据如何提取保存的数据调用TensorBoard面板可能会遇到的问题 模块导入 首先从torch中导入tensorboard的SummaryWriter日志记录模块 from torch.utils.tensorboard import SummaryWriter然后导入要用到的os库&#xff0…

方案设计|汽车轮胎数显胎压计方案

一、引言 数显轮胎胎压计是一个专门测量车辆轮胎气压的工具&#xff0c;它具有高精度测量的功能&#xff0c;能够帮助快速准确获取轮胎气压正确数值&#xff0c;保证轮胎使用安全。本文将对数显轮胎胎压计的方案技术进行分析&#xff0c;包括其基本原理、硬件构成、软件设计等方…