巧用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…

抖音快手短视频直播课程:从0基础到精通,定位、运营、内容、拍摄、剪辑、养号、算法、小店、直播、话术、变现等

随着社交媒体的飞速发展&#xff0c;抖音作为短视频领域的佼佼者&#xff0c;已经成为众多个人和企业展示自我、推广品牌的重要平台。但如何在众多内容中脱颖而出&#xff0c;吸引更多粉丝和关注&#xff0c;成为许多人的困惑。 为此&#xff0c;我们特别推出“抖音运营高手速…

sftp+ssh+nginx部署

SFTP方式登录服务器部署静态资源 使用软件&#xff1a;xftp IP&#xff1a;xx.xx.xx.xx 用户名&#xff1a;root 密码&#xff1a;xx SSH方式登录服务器修改nginx配置文件 使用软件&#xff1a;xshell、putty IP&#xff1a;xx.xx.xx.xx 用户名&#xff1a;root 密码&#x…

docker_构建镜像成功但启动容器的执行程序总是报文件找不到(lesson)

碰到问题 有一次做了一个镜像&#xff0c;制作成功&#xff0c;但运行容器总是报错&#xff1a;找不到文件。 dockerfile如下&#xff1a; FROM golang:1.18 AS builder WORKDIR /app COPY go.mod main.go ./ RUN go mod download COPY . . RUN go build -o tools_cpu_burner…

操作系统概述

操作系统概述 ## 认识操作系统 不同角度看到的操作系统 : 整体看, 使用者, 操作系统者, 普通开发者 从程序执行看 操作系统是其它所有用户程序运行的基础 #include <stdio.h>int main() {printf(“ Hello world\n”); } 该程序的执行过程 : 操作系统检查字符串的…

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…

《解锁创意无限:Stable Diffusion 详细教程指南》

在当今数字艺术的浪潮中&#xff0c;Stable Diffusion 以其强大的功能和创新性成为了众多创作者的新宠。如果你还对它感到陌生&#xff0c;或者想要更深入地了解如何运用它来创造令人惊叹的艺术作品&#xff0c;那么这篇教程将是你的绝佳指南。 一、Stable Diffusion 简介 St…

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 加载矢量…

03-3.1.3 栈的链式存储的实现

&#x1f44b; Hi, I’m Beast Cheng&#x1f440; I’m interested in photography, hiking, landscape…&#x1f331; I’m currently learning python, javascript, kotlin…&#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以订…

【微服务】使用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…