docker+jmeter实现简单的分布式压力测试


阶梯压力测试的场景是为了验证在系统运行期间,用户不断的登录系统并使用一段时间,通过阶梯的场景,模拟实际应用期间系统的稳定性、承载性。

二、常用的阶梯压力测试线程组
stepping Thread Group 步长插件
Concurrency Thread Group 步长并发插件

两者区别 stg不提供设置启动延迟时间,阶梯增压过渡时间、阶梯释放过渡时间,但是ctg提供,ctg可以瞬间释放stg只能阶梯释放线程
通俗的来说,stg是手动的场景,测试的过程需要按照设定好的步骤去执行,
ctg是目标场景,也可以说是自动场景,只需要设置目标,程序会自动执行到目标的运行场景,但是测试过程是不可控制的
在这里插入图片描述

字段详解:
1、This group will start 线程的最大数量
2、First wait for 开始启动的等待时间
3、Then start 启动时的线程数
4、Next add 每次增加的线程组数
5、threads every 每次增加线程组后的持续运行时间
6、using ramp-up 每次线程组增加需要的时间
7、The hold load for 达到最大线程组后的持续运行时间
8、Finally stop 每次减少的线程组数
9、threads every 每次减少线程组后的持续运行时间

实例:在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ba5343f21fef49fc8d3208ac618de124.png

字段详解
1、Target Concurrency 目标并发线程数
2、Ramp up Time 在多长时间内加载完线程数
3、Ramp up StepsCount 分多少次加载完线程
4、Hold Target Rate Time 达到目标值后持续运行多长时间
5、Time Unit 时间单位
6、Thread Iterations Limit 循环次数
7、Log Threads Status into File记录日志文件
实例:

测试方式1【linux安装jmeter执行】:
分布式压测时,linux有时会提示内存不够,当服务器内存不够时,可以创建一个临时的内存交换空间

创建一个 1GB 的交换文件
sudo fallocate -l 1G /swapfile
设置正确的权限
sudo chmod 600 /swapfile
把这个文件设置为交换空间
sudo mkswap /swapfile
启用交换空间
sudo swapon /swapfile

jmeter运行命令
./jmeter -n -t /yourjmxpath -l /yourjtlpath -e -o /yourreportpath

测试方式2、通过docker构建jmeter容器,实现docker运行jmeter脚本:
使用官方的 Java 运行时作为父镜像
FROM openjdk:8-jre-slim
设置 JMeter 版本
ARG JMETER_VERSION=“5.4.1”
下载并安装 JMeter
RUN apt-get clean &&
apt-get update &&
apt-get -qy install
wget
unzip &&
wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-KaTeX parse error: Expected 'EOF', got '&' at position 22: …R_VERSION}.tgz &̲& tar -xzf apa…{JMETER_VERSION}.tgz &&
rm apache-jmeter-KaTeX parse error: Expected 'EOF', got '#' at position 43: …JMeter-Plugins #̲RUN wget https:…{JMETER_VERSION}/lib/ext &&
rm jpgc-casutg-2.10.zip
设置 JMeter home
ENV JMETER_HOME /apache-jmeter-${JMETER_VERSION}
添加 JMeter 到 PATH
ENV PATH J M E T E R H O M E / b i n : JMETER_HOME/bin: JMETERHOME/bin:PATH
COPY ./jmeter-plugins-manager-1.10.jar /apache-jmeter- J M E T E R V E R S I O N / l i b / e x t C O P Y . / j m e t e r − p l u g i n s − c a s u t g − 2.10. j a r / a p a c h e − j m e t e r − JMETER_VERSION/lib/ext COPY ./jmeter-plugins-casutg-2.10.jar /apache-jmeter- JMETERVERSION/lib/extCOPY./jmeterpluginscasutg2.10.jar/apachejmeterJMETER_VERSION/lib/ext

dockerfile完成后,在linux根目录新建一个文件夹,这个文件夹中需要有性能测试的插件和刚刚写完的Dockerfile
之所以要将性能测试插件的jar包放在文件夹中是为了在构建docker镜像的时候可以将宿主机的插件直接copy到构建好的镜像中,避免Dockerfile
中的weget失效
所以步骤执行完毕后,构建镜像,构建命令:docker build -t yourjmetername .
镜像构建完成后,可以通过docker命令运行jmeter镜像
docker run -v /test:/tmp/ -it jmeter-docker /bin/bash -c “jmeter -n -t /tmp/xntest.jmx”

测试终章:分布式压力测试
为什么要进行分布式压力测试:在实际的测试过程中单个jmeter服务运行压力测试是有瓶颈的,一个jmeter的运行瓶颈大约能达到500个线程,测试过程中大型项目的性能需求并不是500个线程就能支撑业务场景的,所以就需要分布式的方式增加jmeter服务,提高线程数量,实现对服务的压力测试,且预测项目的性能瓶颈。
实现分布式测试的方式:
1、虚拟机,可以通过虚拟机的形式多开jmeter服务进行分布式压力测试
虚拟机进行压力测试的缺点:无法运行在真正的服务器上,对服务器的性能压力不准确,不利于性能调优以及分析对应的性能指标

2、docker,可以通过docker服务建立多个容器,实现分布式压力测试
运行在服务器上,可以较为准确的检测系统对服务器的压力

如何通过docker进行分布式压力测试:
1、上面说到了通过docker构建jmeter镜像后,创建容器,运行jmeter脚本,在进行分布式测试时同样的我们也需要创建一个jmeter镜像已供主机和助攻机版本、配置统一

使用官方的 Java 运行时作为父镜像

FROM openjdk:8-jre-slim

设置 JMeter 版本

ARG JMETER_VERSION=“5.4.1”

下载并安装 JMeter

RUN apt-get clean &&
apt-get update &&
apt-get -qy install
wget
unzip &&
wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-KaTeX parse error: Expected 'EOF', got '&' at position 22: …R_VERSION}.tgz &̲& \ tar -xz…{JMETER_VERSION}.tgz &&
rm apache-jmeter-${JMETER_VERSION}.tgz

下载并安装 JMeter-Plugins

#RUN wget https://jmeter-plugins.org/files/packages/jpgc-casutg-2.10.zip && \

unzip jpgc-casutg-2.10.zip -d apache-jmeter-${JMETER_VERSION}/lib/ext && \

rm jpgc-casutg-2.10.zip

设置 JMeter home

ENV JMETER_HOME /apache-jmeter-${JMETER_VERSION}

添加 JMeter 到 PATH

ENV PATH J M E T E R H O M E / b i n : JMETER_HOME/bin: JMETERHOME/bin:PATH

COPY ./jmeter-plugins-manager-1.10.jar /apache-jmeter- J M E T E R V E R S I O N / l i b / e x t C O P Y . / j m e t e r − p l u g i n s − c a s u t g − 2.10. j a r / a p a c h e − j m e t e r − JMETER_VERSION/lib/ext COPY ./jmeter-plugins-casutg-2.10.jar /apache-jmeter- JMETERVERSION/lib/extCOPY./jmeterpluginscasutg2.10.jar/apachejmeterJMETER_VERSION/lib/ext
在创建完成镜像后,通过 build -t name . 构建docker镜像
2、在jmeter主镜像创建完成后,我们需要创建两个dockerfile文件,一个文件是主机的dockerfile文件,一个是助攻机的dockerfile文件
助攻机dockerfile文件

从基础镜像中导入配置,基础镜像指的就是刚才构建的统一版本配置的jmeter镜像

FROM jmeter-base-image

开放助攻机端口

EXPOSE 1099 50000

设置环境变量

ENV JMETER_HOME /path/to/jmeter

直接启动容器 运行程序

ENTRYPOINT ${JMETER_HOME}/bin/jmeter-server
-Dserver.rmi.localport=50000
-Dserver_port=1099

主机dockerfie文件

从基础镜像中导入配置

FROM jmeter-base-image

#开放主机端口
EXPOSE 60000
在这里插入图片描述

直接启动容器,运行程序

ENTRYPOINT [“jmeter-server”, “-Dserver.rmi.ssl.disable=true”]
在这里插入图片描述

两个文件创建完毕后,就可以启动容器了
首先启动主机容器
docker run -v yourjmx:/tmp -dit --name yourjmetername imagename
其次启动助攻机容器(这里需要注意,助攻机可以启动多个,一直启动到满足场景需求的情况下,举个例子,项目最大的压力负责是5000用户,也就是5000线程,一个jmeter的瓶颈大约是500 所以我们需要 5000/500=10个容器)
docker run -v yourjmx:/tmp -dit --name yourjmetername imagename
docker run -v yourjmx:/tmp -dit --name yourjmetername imagename
docker run -v yourjmx:/tmp -dit --name yourjmetername imagename

命令输入完成,容器启动成功

容器运行完成后,需要找到助攻机的ip地址:
sudo docker inspect --format ‘{{ .Name }} => {{ .NetworkSettings.IPAddress }}’ $(sudo docker ps -a -q)

容器创建完成后,就需要执行jmeter命令了,但是由于docker的容器在linux系统中是隔离的,所以jmeter命令需要进入主机容器中执行
docker exec -it name bash 进入对应容器命令
进入后需要找到jmeter/bin目录
进入bin目录,运行命令:
jmeter -n -t /yourjmx -l /yourreport -R yourslaveip(助攻机的ip)
运行后如果能看到进程和执行详情,此时分布式压力测试成功运行

运行结果查看:

  • summary
    :这是一个标记,表示这是一个摘要行。

或 =:+ 表示这是一个间隔的摘要,= 表示这是从测试开始到现在的总摘要。

  • 数字(例如
    7543 或 2587):这是在该间隔内完成的请求数。
  • in
    后面的时间(例如 00:00:47 或 00:00:29):这是该间隔的长度。
  • /s
    后面的数字(例如 161.3 或 90.0):这是在该间隔内的平均请求数(每秒请求数)。
  • Avg
    :这是在该间隔内的平均响应时间(毫秒)。
  • Min
    :这是在该间隔内的最小响应时间(毫秒)。
  • Max
    :这是在该间隔内的最大响应时间(毫秒)。
  • Err
    :这是在该间隔内的错误数和错误率。
  • Active
    :当前活动的线程数。
  • Started
    :已经启动的线程数。
  • Finished
    :已经完成的线程数。
  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用Docker安装JMeter时,你可以按照以下步骤进行操作。首先,你需要从镜像库中下载JMeterDocker镜像。你可以通过命令行输入"docker pull justb4/jmeter:latest"来下载最新版本的JMeter镜像。接下来,你可以使用Docker命令创建一个JMeter容器实例。例如,你可以运行"docker run -dit --name jmeter-test justb4/jmeter:latest"来创建一个名为"jmeter-test"的容器实例。一旦容器创建成功,你可以使用"docker exec -it jmeter-test /bin/bash"命令进入容器内部。在容器内部,你可以执行JMeter的各种测试任务。你还可以通过复制文件到容器内部来导入测试脚本,使用命令"docker cp test.jmx jmeter-test:/jmeter"将本地的JMeter测试脚本复制到容器内部的"/jmeter"目录中。这样,你就可以在Docker环境中进行JMeter的性能测试了。 你还可以参考这篇文章来了解更多关于在Docker中配置JMeter和安装JMeter的详细步骤。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [基于DockerJMeter分布式压测](https://blog.csdn.net/wx17343624830/article/details/126789259)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [性能测试阶段3之docker配置及jmeter安装](https://blog.csdn.net/weixin_45912307/article/details/120113780)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值