快速上手Jemter分布式压测实战和代码详细解析

🚀 作者 :“二当家-小D”

🚀 博主简介:⭐前荔枝FM架构师、阿里资深工程师||曾任职于阿里巴巴担任多个项目负责人,8年开发架构经验,精通java,擅长分布式高并发架构,自动化压力测试,微服务容器化k8s等

🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬

🍅文末获取源码联系 配套笔记打包🍅

1.jemter分布式的介绍

        Jemter分布式解析是指使用JMeter进行负载测试时,将负载测试任务分发到多个 JMeter 客户端进行执行的一种模式。这种模式可以提高测试的并发能力和吞吐量,并且可以模拟真实的生产环境。

        在JMeter分布式解析中,有一个主控制节点和多个被控制节点。主控制节点负责将测试计划分发给被控制节点,并收集执行结果进行统计和分析。被控制节点接收到测试计划后,根据配置进行并发执行,并将执行结果返回给主控制节点。

       为了进行分布式解析,需要在主控制节点上进行一些配置。首先,需要设置主控制节点的远程测试属性,指定被控制节点的 IP 地址和端口号。然后,需要配置被控制节点的 IP 地址和端口号,并将它们添加到主控制节点的远程测试计划中。

        在被控制节点上,需要启动 JMeter 服务器,并等待主控制节点的指令。一旦主控制节点发送测试计划,被控制节点就会根据配置进行并发执行,并将执行结果返回给主控制节点。

        通过使用 JMeter 分布式解析,可以实现大规模的负载测试,并且可以更好地模拟真实的生产环境。同时,通过将负载分发到多个节点进行执行,还能提高测试的吞吐量和并发能力。

2.本地jemter实现分布式压测

     2.1解压三个jmeter

 

    2.2配置01和02

    

 2.3启动jemter分布式

 2.4启动主配置

2.5简单压测

 测试成功

 3.代码实现

public class JMeterDistributed {
    
    public static void main(String[] argv) throws Exception {

        // 设置JMeter的基础路径和属性文件
        String jmeterHome = "D:\\分布式jmeter\\apache-jmeter-5.5";

        JMeterUtils.setJMeterHome(jmeterHome);
        JMeterUtils.loadJMeterProperties(JMeterUtils.getJMeterBinDir() + "/jmeter.properties");
        JMeterUtils.initLogging();
        JMeterUtils.initLocale();
        // 创建HTTP请求采样器
        HTTPSampler httpSampler = new HTTPSampler();
        // 设置HTTP请求采样器的属性 setDomain("www.baidu.com")
        httpSampler.setDomain("www.baidu.com");
        // setPort(80)解析 www.baidu.com:80
        httpSampler.setPort(80);
        // setPath("/")解析 www.baidu.com:80/
        httpSampler.setPath("/");
        // setMethod("GET")设置请求方式
        httpSampler.setMethod("GET");
        // 创建循环控制器
        LoopController loopController = new LoopController();
        loopController.setLoops(10);
        loopController.setFirst(true);
        loopController.initialize();
        // 定义线程组
        SetupThreadGroup threadGroup = new SetupThreadGroup();
        threadGroup.setName("测试线程组");
        threadGroup.setNumThreads(10);
        threadGroup.setRampUp(5);
        threadGroup.setSamplerController(loopController);
        // 定义测试计划
        TestPlan testPlan = new TestPlan("成功的测试计划");
        // 结构化测试计划
        org.apache.jorphan.collections.HashTree testPlanTree = new org.apache.jorphan.collections.HashTree();
        testPlanTree.add(testPlan);
        org.apache.jorphan.collections.HashTree threadGroupHashTree = new org.apache.jorphan.collections.HashTree();
        threadGroupHashTree = testPlanTree.add(testPlan, threadGroup);
        threadGroupHashTree.add(httpSampler);
        // 保存生成的测试计划
        SaveService.saveTree(testPlanTree, new FileOutputStream(jmeterHome + "/example.jmx"));
        // 定义Summarizer输出
        Summariser summer = null;
        String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary");
        if (summariserName.length() > 0) {
            summer = new Summariser(summariserName);
        }
        // 存储结果数据
        String logFile = jmeterHome + "/example.jtl";
        ResultCollector logger = new ResultCollector(summer);
        logger.setFilename(logFile);
        testPlanTree.add(testPlanTree.getArray()[0], logger);
        // 获取Slave节点
        List<String> remoteHosts = new LinkedList<>();
        remoteHosts.add("127.0.0.1:10001"); // 你的Slave节点地址或机器名
        remoteHosts.add("127.0.0.1:10002"); // 你可以继续添加其他Slave节点
        // 初始化分布式测试环境
        DistributedRunner distributedRunner = new DistributedRunner();
        distributedRunner.setStdout(System.out);
        distributedRunner.setStdErr(System.err);
        distributedRunner.init(remoteHosts, testPlanTree);
        // 启动分布式测试
        distributedRunner.start();
        // 添加结束信号
        Runtime.getRuntime().addShutdownHook(new Thread() {
            @Override
            public void run() {
                distributedRunner.shutdown(remoteHosts);
            }
        });
    }
}
 3.1测试成功

4、小结

今天的文章限于篇幅我就先通过一个简单的案例来和大家分享一下 jmeter的基本用法,以便于小伙伴们对 jmeter建立一个直观的印象,更多的玩法,D哥将在后续的文章中和大家继续介绍

原创不易,欢迎点赞+收藏

完整的资料和代码已经整理好,如果有相关操作问题,可以互相沟通交流

资料压缩包文末获取↓↓↓↓

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL的事务相关的语句的使用

MySQL的事务相关的语句的使用 事务是数据库管理系统执行过程中的一个程序单位&#xff0c;由一个或多个数据库操作组成。MySQL作为一款流行的关系型数据库管理系统&#xff0c;支持事务处理&#xff0c;允许用户定义一系列的操作&#xff0c;这些操作要么完全执行&#xff0c;…

每日OJ题_其它背包问题③_力扣377. 组合总和 Ⅳ(似包非包)

目录 力扣377. 组合总和 Ⅳ&#xff08;似包非包&#xff09; 解析代码 力扣377. 组合总和 Ⅳ&#xff08;似包非包&#xff09; 377. 组合总和 Ⅳ 难度 中等 给你一个由 不同 整数组成的数组 nums &#xff0c;和一个目标整数 target 。请你从 nums 中找出并返回总和为 t…

随着深度学习的兴起,浅层机器学习没有用武之地了吗?

深度学习的兴起确实在许多领域取得了显著的成功&#xff0c;尤其是那些涉及大量数据和复杂模式的识别任务&#xff0c;如图像识别、语音识别和自然语言处理等。然而&#xff0c;这并不意味着浅层机器学习&#xff08;如支持向量机、决策树、朴素贝叶斯等&#xff09;已经失去了…

【Linux】:文本编辑与输出命令 轻松上手nano、echo和cat

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Linux深造日志 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、nano1.1 打开文件&#xff1a;1.2 常用快捷键&#xff1a;1.3 其他功能&#xff…

PaddleSeg开始与搭建

因为使用的比较多,所以来总结一下。 先介绍一下,为什么用PaddleSeg 1、搭建模型更容易,和MMSeg相比,配置更加简单,容易上手 缺点是 1、目前版本还无法生成热力图,我看Paddle官方已经出比赛在解决这个问题了 2、和主流pytorch存在一定差别,模型迁移时需要熟悉两种配置;M…

DBA-现在应该刚刚入门吧

说来话长 在2023年以前&#xff0c;我的DBA生涯都是“孤独的”。成长路径除了毕业前的实习期有人带&#xff0c;后续几乎都是靠自学。如何自学&#xff0c;看视频、看文档、网上查阅资料、项目实战。 可能是学疏才浅 &#xff0c;一直都是在中小公司混&#xff0c;在中小公司通…

GNU Radio使用Python Block实现模块运行时间间隔获取

文章目录 前言一、timestamp_sender 模块二、timestamp_receiver 模块三、测试 前言 GNU Radio 中没有实现测量两个模块之间的时间测量模块&#xff0c;本文记录一下通过 python block 制作一个很简单的测时 block。 一、timestamp_sender 模块 使用 python block 做一个发送…

深入理解VGG网络,清晰易懂

深入理解VGG网络 VGG网络是深度学习领域中一个非常经典的卷积神经网络&#xff08;CNN&#xff09;架构&#xff0c;由牛津大学的视觉几何组&#xff08;Visual Geometry Group&#xff09;提出。它在2014年的ImageNet挑战赛中取得了第二名的好成绩&#xff0c;并且在随后的许…

3ds Max2024安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 3ds Max是一款基于PC系统的强大3D建模、渲染和制作软件&#xff0c;广泛应用于游戏开发、影视后期制作、建筑设计、工业设计等多个领域。其拥有丰富的建模工具&#xff0c;可轻松创建逼真的三维场景和模型&#xff1b;同时&#…

揭秘!综合布线可视化管理软件如何助力集成商实现价值飞跃?

一、弱电集成商发展现状 近期小编通过与多家做弱电集成的朋友交流探讨了解到目前弱电集成商发展如同2024年国内大部分企业一样举步维艰&#xff0c;当然也有个别企业做的项目优质并且利润可观&#xff0c;但是整体不多&#xff0c;总结原因主要有以下几点&#xff1a; 工程项目…

【git】git ignore如何添加core/config.py忽略

在Git中&#xff0c;.gitignore文件用于指定不被Git追踪的文件和文件夹。要添加core/config.py文件到.gitignore中&#xff0c;你需要编辑.gitignore文件并添加以下行&#xff1a; core/config.py这行表示Git应该忽略名为config.py的文件&#xff0c;它位于core目录下。确保在…

【剪映专业版】17高质量视频如何导出

视频课程&#xff1a;B站有知公开课【剪映电脑版教程】 1.导出 目的&#xff1a;导出高质量的视频 如果没有音频及字幕的情况下&#xff0c;音频导出和字幕导出为灰色 2.视频导出 超清&#xff1a;1080P 注意&#xff1a;如果原始素材的分辨率为小于1080P&#xff0c;如果导…

算法:期望场景;鲁棒优化

部分代码 for i1:T stst[D_DGk(i)*min_P_DG<P_DGk(i)<D_DGk(i)*max_P_DG]; end for i2:T indicatorD_DGk(i)-D_DGk(i-1); rangei:min(T,iT_up-1); st st[D_DGk(range)>indicator]; end for i2:T indicatorD_DGk(i-1)-D_DGk(i); rangei:min(T…

Linux - Docker 安装 Nacos

拉取 Nacos 镜像 使用以下命令从 Docker Hub 拉取最新版本的 Nacos 镜像&#xff1a; docker pull nacos/nacos-server启动 Nacos 容器 使用以下命令启动 Nacos 容器&#xff1a; docker run -d \--name nacos \--privileged \--cgroupns host \--env JVM_XMX256m \--env M…

Darknet,看过很多篇,这个最清晰了

Darknet深度学习框架&#xff1a;YOLO背后的强大支持 Darknet&#xff0c;一个由Joseph Redmon开发的轻量级神经网络框架&#xff0c;以其在计算机视觉任务&#xff0c;特别是目标检测中的卓越表现而闻名。本文将详细介绍Darknet的基本概念、结构以及它在深度学习领域的应用。…

nvm版本控制nvm list available报错

# 配置node镜像&#xff1a; node_mirror: https://npmmirror.com/mirrors/node/ # 配置npm镜像&#xff1a; npm_mirror: https://npmmirror.com/mirrors/npm/ 2024.4.22换域名了&#xff0c;改成这个才能用别的不行

揭秘! 商业模式并不是传销!七星创客模式!

关于“商业模式是否等同于拉人头、传销”的疑问&#xff0c;近期在社会上引起了广泛的讨论。很多人一提到商业模式&#xff0c;就会联想到拉人头、传销等负面概念&#xff0c;似乎所有的商业模式都被贴上了这样的标签。 然而&#xff0c;商业模式的内涵远不止于此。商业活动中的…

Linux上的uname

2024年4月19日&#xff0c;周五上午 这是我第一篇用CSDN上的markdown编辑器写的博客&#xff0c;感觉还不错 uname 是一个常用的命令行工具&#xff0c;uname 的全称是 “Unix Name”&#xff0c;它是一个 Unix 和类 Unix 操作系统上的命令行工具&#xff0c;用于获取操作系统相…

mysql面试题八(SQL优化)

目录 1.一条 SQL 是如何执行的 2.索引失效的几种情况 3.EXPLAIN 4.Where 子句如何优化 5.超大分页或深度分页如何处理 6.大表查询如何优化 7.分库分表 基本概念 分库分表方法 水平拆分 垂直拆分 分库分表后的注意事项 1.一条 SQL 是如何执行的 在MySQL中&#xff0…

《项目管理超图解》新书来了:快速提升团队行动力的8个关键!

各位&#xff0c;速来对号入座&#xff01; 你的团队&#xff0c;是这样&#xff1f;↓ 还是……这样&#xff1f;↓ 团队失控、协作混乱、项目逾期……有没有可能&#xff0c;是团队行动力出了问题&#xff1f; 所以各位管理者们、创业者们、产品经理/项目经理们、项目管理从…