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

news2024/12/23 17:22:50

🚀 作者 :“二当家-小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哥将在后续的文章中和大家继续介绍

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

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

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

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

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

相关文章

2025考研数学武忠祥强化班视频,百度网盘课程+讲义PDF更新

25考研的小伙伴们现在应该基础都学习的差不多了吧&#xff01; 是时候进入强化阶段的学习啦。 2025考研数学强化班全程网盘&#xff1a;https://pan.baidu.com/s/1Z029fuCLkyyhIRFqd5QKcg 提取码&#xff1a;p3ue 晚上好&#xff0c;聊聊17堂课的看课攻略。 今年的17堂课还…

BUUCTF——[GXYCTF2019]BabyUpload

BUUCTF——[GXYCTF2019]BabyUpload 1.上传嘛&#xff0c;直接丢正常的jpg文件进服务器 2.发现可以正常上传&#xff0c;并且回显出来啦文件上传的路径 /var/www/html/upload/7df22610744ec51e9cb7a8a8eb674374/1111.jpg 3.尝试上传一句话木马 <?php eval($POST[123456]…

如何使用ChatGPT仿写一篇学术论文

点击下方▼▼▼▼链接直达AIPaperPass &#xff01; AIPaperPass - AI论文写作指导平台 目录 1.仿写的目的 2.根据专业方向搜集合适的文献 3.总结想要仿写的文献 4.使用ChatGPT一步一步仿写 5.书籍介绍 AIPaperPass智能论文写作平台 深入地阅读和分析你研究领域的相关文…

小游戏贪吃蛇的实现之C语言版

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;C语言 目录 游戏前期准备&#xff1a; 设置控制台相关的信息 GetStdHandle GetConsoleCursorInfo SetConsoleCursorInfo SetConsoleCu…

Ansible 指定受控端使用Python的版本

最近在装Ansible&#xff0c;有一台受控端Ubuntu16的服务器&#xff0c;安装了Python2.7.12和Pyhon3.5。当用Ansible连接它时&#xff0c;显示使用的是Python3.5。最后看文档&#xff0c;发现Ansible可以在hosts的文件中指定受控服上运行的Python。 现象 受控端 查看Python版…

这些小众工作软件让你事半功倍

大家好呀&#xff01;&#x1f44b; 今天我要来种草一些不那么主流&#xff0c;但却能大大提升你工作效率的神器软件&#xff01;&#x1f31f; 如果你也像我一样&#xff0c;对那些大众化的工作工具已经审美疲劳&#xff0c;那么快来一起探索这些隐藏的宝藏吧&#xff01;&…

OpenTiny 亮相 W3C 2024春季顾问委员会会议,共话行业新趋势。

近日&#xff0c;万维网联盟&#xff08;World Wide Web Consortium&#xff0c;简称 W3C&#xff09;于4月8日-4月9日在日本召开2024年顾问委员会会议&#xff08;Advisory Committee Meeting&#xff09;。华为产业发展专家丁蔚博士及华为云 OpenTiny 项目的 Web 前端框架技术…

国产台灯哪个品牌比较好?五款国产护眼台灯品牌推荐

随着学生们重返校园&#xff0c;家长和孩子们忙于新学期的准备工作&#xff0c;眼睛健康的考量自然也在其中。这也是为何近年来护眼台灯越来越受到欢迎的原因之一。国产台灯哪个品牌比较好&#xff1f;作为一个长期近视并且日常用眼时间较长的人&#xff0c;我本人对护眼台灯有…

Springboot+Vue项目-基于Java+MySQL的网上购物商城系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

VisualStudio2019和2022开发Winform项目用到Devexpress组件报错不能正确加载的解决办法

1.报错1 问题简单描述&#xff1a;DevExpress.Utils.ImageCollectionStreamer 无法强制转换为 DevExpress.Utils.ImageCollectionStreamer。 原因分析&#xff1a;原项目某个组件使用的是 DevExpresss.XtraBars.v15.1版本&#xff0c;直接引用扩展控件改成引用v20.2。 解决办法…

HTML 中创建 WebSocket服务与接收webSocket发送内容

效果图 服务端 html客户端接受的消息 接下来开始实现服务端 创建server.js const WebSocket require(ws);const wss new WebSocket.Server({ port: 8877 });wss.on(connection, function connection(ws) {console.log(WebSocket connection opened.);// 每隔 5 秒发送一次…

前端学习之DOM编程案例:点名案例和秒表案例

点名 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>点名案例</title><style>*{margin: 0;padding: 0;}</style> </head> <body><div id"container">…

C语言进阶课程学习记录-函数参数的秘密

C语言进阶课程学习记录-函数参数的秘密 实验实验小结调用约定实验-求平均数实验-可变参数的函数小结 本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程&#xff0c;图片全部来源于课程PPT&#xff0c;仅用于个人学习记录 实验 #include <stdio.h>int func(int i, int…

解线性方程组——追赶法解三对角方程组 | 北太天元

一、问题描述 对于线性方程组 A x b , A ( b 1 c 1 a 2 b 2 c 2 ⋱ ⋱ ⋱ ⋱ ⋱ ⋱ a n − 1 b n − 1 c n − 1 a n b n ) , b ( f 1 f 2 ⋮ f n ) Axb,\quad A\begin{pmatrix}b_1&c_1&&&&\\a_2&b_2&c_2&&&\\&\ddots&\d…

Unity导出package

C#代码导出后为一个dll&#xff0c;原有的不同平台的库不变。 以下操作均在build PC 平台下操作。 1.在要导出的文件夹下建assembly definition (Any platform) 2.将项目文件夹下的\Library\ScriptAssemblies中的相应assembly definition的dll复制到要导出的文件夹下 3.在uni…

Linux进阶篇:CentOS7搭建NFS文件共享服务

CentOS7搭建NFS文件共享服务 一、NFS介绍 NFS(Network File System)意为网络文件系统&#xff0c;它最大的功能就是可以通过网络&#xff0c;让不同的机器不同的操作系统可以共享彼此的文件。简单的讲就是可以挂载远程主机的共享目录到本地&#xff0c;就像操作本地磁盘一样&…

适用于摩托车仪表盘的液晶驱动IC:S1D15K01

S1D15K01j是EPSON的一款适用于适用摩托车混合数字仪表盘的车规混合液晶驱动IC。随着摩托车具备的特性和功能的逐渐增多&#xff0c;需要在仪表盘显示器上显示的信息量越来越大。另一方面&#xff0c;可用于显示的空间有限&#xff0c;需要有效地显示信息。在过去&#xff0c;摩…

《深入浅出多模态》: 多模态经典模型:BLIP

🎉AI学习星球推荐: GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系的学习资料,配有全面而有深度的专栏内容,包括不限于 前沿论文解读、资料共享、行业最新动态以、实践教程、求职…

CANdb++数据库

1.理解主机厂定义的信号矩阵表 2.使用CANdb制作对应矩阵表中报文和信号dbc文件。 3.新建数据库 打开candb软件&#xff0c;点击文件&#xff0c;选择创建数据库&#xff0c;并选择数据库模版&#xff0c;本次测试选择CanTemplate.dbc模版&#xff0c;选择保存在本机中的位置&…

7.机器学习-十大算法之一拉索回归(Lasso)算法原理讲解

7.机器学习-十大算法之一拉索回归&#xff08;Lasso&#xff09;算法原理讲解 一摘要二个人简介三前言四原理讲解五算法流程六代码实现6.1 坐标下降法6.2 最小角回归法 七第三方库实现7.1 scikit-learn实现&#xff08;坐标下降法&#xff09;&#xff1a;7.2 scikit-learn 实现…