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

这篇具有很好参考价值的文章主要介绍了docker+jmeter实现简单的分布式压力测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


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

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

两者区别 stg不提供设置启动延迟时间,阶梯增压过渡时间、阶梯释放过渡时间,但是ctg提供,ctg可以瞬间释放stg只能阶梯释放线程
通俗的来说,stg是手动的场景,测试的过程需要按照设定好的步骤去执行,
ctg是目标场景,也可以说是自动场景,只需要设置目标,程序会自动执行到目标的运行场景,但是测试过程是不可控制的
docker+jmeter实现简单的分布式压力测试,docker,jmeter,分布式

字段详解:
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 每次减少线程组后的持续运行时间

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

字段详解
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
docker+jmeter实现简单的分布式压力测试,docker,jmeter,分布式

直接启动容器,运行程序

ENTRYPOINT [“jmeter-server”, “-Dserver.rmi.ssl.disable=true”]
docker+jmeter实现简单的分布式压力测试,docker,jmeter,分布式

两个文件创建完毕后,就可以启动容器了
首先启动主机容器
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
    :这是一个标记,表示这是一个摘要行。

或 =:+ 表示这是一个间隔的摘要,= 表示这是从测试开始到现在的总摘要。文章来源地址https://www.toymoban.com/news/detail-853775.html

  • 数字(例如
    7543 或 2587):这是在该间隔内完成的请求数。
  • in
    后面的时间(例如 00:00:47 或 00:00:29):这是该间隔的长度。
  • /s
    后面的数字(例如 161.3 或 90.0):这是在该间隔内的平均请求数(每秒请求数)。
  • Avg
    :这是在该间隔内的平均响应时间(毫秒)。
  • Min
    :这是在该间隔内的最小响应时间(毫秒)。
  • Max
    :这是在该间隔内的最大响应时间(毫秒)。
  • Err
    :这是在该间隔内的错误数和错误率。
  • Active
    :当前活动的线程数。
  • Started
    :已经启动的线程数。
  • Finished
    :已经完成的线程数。

到了这里,关于docker+jmeter实现简单的分布式压力测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于docker实现JMeter分布式压测

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

    2024年02月07日
    浏览(18)
  • 压力山大?搭建JMeter分布式压测环境轻松应对!

    目录 引言 windows环境部署 1.安装环境变量 2.配置环境变量 3.修改Jmeter配置文件 4.启动jmeter 5.启动分布式服务 Linux环境部署 1.安装JDK+Jmeter 2.环境优化 4.编写Jmeter脚本 5.启动Jmeter 6.停止Jmeter 7.打包查看测试报告 您想要提高您的应用程序的性能吗?想要确保它在高负载下仍然能够

    2024年02月07日
    浏览(19)
  • 【Locust分布式压力测试】

    Locust分布式压力测试 https://docs.locust.io/en/stable/running-distributed.html Distributed load generation A single process running Locust can simulate a reasonably high throughput. For a simple test plan and small payloads it can make more than a thousand requests per second, possibly over ten thousand if you use FastHttpUser. But if your test plan i

    2024年04月22日
    浏览(10)
  • locust快速入门--使用分布式提高测试压力

    使用默认的locust启动命令进行压测时,尽管已经将用户数设置大比较大(400),但是压测的时候RPS一直在100左右。需要增加压测的压力。 如果你是通过命令行启动的或者参考之前 文章 的启动方式: 命令行: locust 库方法: ` 因为 create_local_runner 会创建一个 LocalRunner ,这个

    2024年01月18日
    浏览(20)
  • 【性能测试】JMeter分布式测试及其详细步骤

    性能测试是软件测试中的一种,它可以衡量系统的稳定性、扩展性、可靠性、速度和资源使用。它可以发现性能瓶颈,确保能满足业务需求。很多系统都需要做性能测试,如Web应用、数据库和操作系统等。 性能测试种类非常多,有些概念也很相近: Load Testing Baseline Testing S

    2024年02月02日
    浏览(20)
  • 性能测试-JMeter分布式测试及其详细步骤

    性能测试是软件测试中的一种,它可以衡量系统的稳定性、扩展性、可靠性、速度和资源使用。它可以发现性能瓶颈,确保能满足业务需求。很多系统都需要做性能测试,如Web应用、数据库和操作系统等。 性能测试种类非常多,有些概念也很相近: Load Testing Baseline Testing S

    2024年02月07日
    浏览(22)
  • Jmeter性能测试:高并发分布式性能测试

    当进行高并发性能测试的时候,受限于Jmeter工具本身和电脑硬件的原因,无法满足我们对大并发性能测试的要求。 基于这种场景下,我们就需要采用分布式的方式来实现我们高并发的性能测试要求。 ​要进行分布式性能测试,我们首先要一台机器作为主控机(Controller),其

    2024年02月08日
    浏览(19)
  • Jmeter进阶使用指南-分布式测试

    当你需要模拟大量并发用户并测试应用程序的性能时,JMeter的分布式测试功能非常有用。分布式测试允许你使用多个JMeter实例来模拟并发用户,从而提供更高的负载。 下面是一个详细的介绍和讲解分布式测试的步骤: 准备主机和从机: 首先,你需要准备一台主机和多台从机

    2024年02月09日
    浏览(16)
  • Jmeter 分布式性能测试避坑指南

    在做后端服务器性能测试中,我们会经常听到\\\'分布式\\\'。那你,是否了解分布式呢?今天,我们就来给大家讲讲,在企业实战中,如何使用分布式进行性能测试,实战过程中,又有哪些地方要特别注意?   做性能测试时,如果被测系统性能比较好,或者系统项目比较大,那么

    2024年02月11日
    浏览(17)
  • 基于Docker的JMeter分布式压测

    目录 前言: Docker Docker在JMeter分布式测试中的作用 Dockerfile用于JMeter基础: Dockerfile for JMeter Server / Slave: 总结 前言:         基于Docker的JMeter分布式压测是一种将JMeter测试分布在多个容器中进行的方法,可以提高测试的性能和效率。使用Docker容器化JMeter,可以轻松地在多个主

    2024年02月11日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包