Jmeter 分布式测试
Jmeter单机进行压测,受到单台机器的性能影响,Jmeter支持分布式测试,用一个控制节点去控制多个工作节点去模拟更多的用户。
版本信息
| 内容 | 版本号 |
|---|---|
| JDK | 1.8 |
| Jmeter | 5.6.2 |
分布式测试原理
jmeter 官网对分布式测试有说明,jmeter分布式测试官网介绍,工作原理,如下图所示

- 控制节点,该节点可以使用图形界面运行,可以直接使用 jmeter.bat运行,控制节点通过 RMI 通信,调用工作节点,发放执行脚本的命令,收集测试结果
- 工作节点,执行测试脚本命令,存储测试结果
- 目标服务器,需要压测的网站
分布式测试RMI 通信介绍
为了理解Jmeter 分布式测试调用的源码,写了一个样例工程,项目地址https://gitee.com/3281328128/jmeter-source-example, 下载项目之后,按照以下步骤配置
- 编译项目 mvn install,会发现工程下面产生了2个jar包,jmeter-rmi-server.jar, jmeter-rmi-client.jar

- server.jar 模拟的是工作节点, client.jar 模拟的是控制节点。把server.jar 复制到其它工作节点,同级目录复制一份 jmeter.properties文件

- 启动所有工作节点的jar包
java -jar jmeter-rmi-server.jar

ubuntu 运行报错

ubuntu 的需要加 -Djava.rmi.server.hostname=192.168.230.128,
hostname 填写对应的ip
java -Djava.rmi.server.hostname=192.168.230.128 -jar jmeter-rmi-server.jar
- 在 jmeter.properties 配置控制节点的 remote_hosts
配置之前,先验证以下到对应的端口是否通的 telnet [ip] [端口]

telnet 192.168.137.209 1099
如果网络通的,会显示登录成功,跳转到空白页面

配置信息如下:
remote_hosts=192.168.137.209,192.168.230.128
- 启动控制节点的jar包
java -jar jmeter-rmi-client.jar
运行日志如下
2024-01-28 19:38:20.337 [34mINFO [0;39m [1;33m[main][0;39m [36mc.s.j.r.c.ClientMain[0;39m 加载配置文件路径 jmeter.properties
2024-01-28 19:38:20.352 [34mINFO [0;39m [1;33m[main][0;39m [36mc.s.j.r.c.ClientMain[0;39m 配置远程服务地址 192.168.137.209,192.168.230.128
2024-01-28 19:38:20.353 [34mINFO [0;39m [1;33m[main][0;39m [36mc.s.j.r.c.ClientMain[0;39m 当前测试计划ID d6855a1d-cd35-4a4f-9ff4-9cd696333757
2024-01-28 19:38:20.354 [34mINFO [0;39m [1;33m[main][0;39m [36mc.s.j.r.c.DistributedRunner[0;39m Configuring remote engine: 192.168.137.209
2024-01-28 19:38:20.781 [34mINFO [0;39m [1;33m[main][0;39m [36mc.s.j.r.c.ClientJMeterEngine[0;39m 当前测试计划 TestPlan{id='d6855a1d-cd35-4a4f-9ff4-9cd696333757'}
2024-01-28 19:38:20.782 [34mINFO [0;39m [1;33m[main][0;39m [36mc.s.j.r.c.DistributedRunner[0;39m Configuring remote engine: 192.168.230.128
2024-01-28 19:38:20.844 [34mINFO [0;39m [1;33m[main][0;39m [36mc.s.j.r.c.ClientJMeterEngine[0;39m 当前测试计划 TestPlan{id='d6855a1d-cd35-4a4f-9ff4-9cd696333757'}
2024-01-28 19:38:20.845 [34mINFO [0;39m [1;33m[main][0;39m [36mc.s.j.r.c.ClientJMeterEngine[0;39m running clientengine run method
2024-01-28 19:38:20.895 [34mINFO [0;39m [1;33m[main][0;39m [36mc.s.j.r.c.ClientJMeterEngine[0;39m sent test to 192.168.137.209 basedir=
2024-01-28 19:38:20.897 [34mINFO [0;39m [1;33m[main][0;39m [36mc.s.j.r.c.ClientJMeterEngine[0;39m Sending properties {}
2024-01-28 19:38:20.972 [34mINFO [0;39m [1;33m[main][0;39m [36mc.s.j.r.c.ClientJMeterEngine[0;39m sent run command to 192.168.137.209
2024-01-28 19:38:20.975 [34mINFO [0;39m [1;33m[main][0;39m [36mc.s.j.r.c.ClientJMeterEngine[0;39m running clientengine run method
2024-01-28 19:38:20.984 [34mINFO [0;39m [1;33m[main][0;39m [36mc.s.j.r.c.ClientJMeterEngine[0;39m sent test to 192.168.230.128 basedir=
2024-01-28 19:38:20.985 [34mINFO [0;39m [1;33m[main][0;39m [36mc.s.j.r.c.ClientJMeterEngine[0;39m Sending properties {}
2024-01-28 19:38:21.010 [34mINFO [0;39m [1;33m[main][0;39m [36mc.s.j.r.c.ClientJMeterEngine[0;39m sent run command to 192.168.230.128
2024-01-28 19:38:21.012 [34mINFO [0;39m [1;33m[main][0;39m [36mc.s.j.r.c.ClientMain[0;39m 远程调用完成
Jmeter 配置分布式测试步骤
配置工作节点 Worker Nodes
- 配置SSL
参考官方配置 https://jmeter.apache.org/usermanual/remote-test.html#setup_ssl
如果不想配置SSL , 修改jmeter 的 ssl 配置,设置为 true
# Set this if you don't want to use SSL for RMI
server.rmi.ssl.disable=true
- 启动工作节点
windows 系统节点直接jmeter-server.bat 即可启动,Linux 系统需要使用命令行, hostname 填写机器IP
sh jmeter-server -Djava.rmi.server.hostname=192.168.230.128
配置控制节点
- 添加工作节点的IP到配置文件 jmeter.properties, 修该 remote_hosts、server.rmi.ssl.disable 配置项
# Remote Hosts - comma delimited
#remote_hosts=127.0.0.1
#remote_hosts=localhost:1099,localhost:2010
remote_hosts=192.168.137.209,192.168.230.128# 禁用 ssl
# Set this if you don't want to use SSL for RMI
server.rmi.ssl.disable=true
- 启动 jmeter 图形界面, windows 直接点击 jmeter.bat

如果配置成功,可以在远程启动这里看到之前配置的 remote_hosts。
启动测试

工作节点查看日志 bin/jmeter-server.log
chengdu@ubuntu:~/jmeter/apache-jmeter-5.6.3/bin$ tail -f jmeter-server.log

相关文章:
Jmeter 分布式测试
Jmeter单机进行压测,受到单台机器的性能影响,Jmeter支持分布式测试,用一个控制节点去控制多个工作节点去模拟更多的用户。 版本信息 内容版本号JDK1.8Jmeter5.6.2 分布式测试原理 jmeter 官网对分布式测试有说明,jmeter分布式…...
在 Ubuntu 上安装 Docker Engine
系列文章目录 前言 要在 Ubuntu 上开始使用 Docker Engine,请确保满足先决条件,然后按照安装步骤进行操作。 一、先决条件 注意事项 如果您使用 ufw 或 firewalld 管理防火墙设置,请注意当您使用 Docker 暴露容器端口时,这些端口…...
Mac安装nvm,安装多个不同版本node,指定node版本
一.安装nvm brew install nvm二。配置文件 touch ~/.zshrc echo export NVM_DIR~/.nvm >> ~/.zshrc echo source $(brew --prefix nvm)/nvm.sh >> ~/.zshrc三.查看安装版本 nvm -vnvm常用命令如下:nvm ls :列出所有已安装的 node 版本nvm…...
【开源】基于JAVA+Vue+SpringBoot的智慧家政系统
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询家政服务4.2 新增单条服务订单4.3 新增留言反馈4.4 小程序登录4.5 小程序数据展示 五、免责说明 一、摘要 1.1 项目介绍 基于微信小程序JAVAVueSpringBootMySQL的智慧家政系统࿰…...
Python NLP深度学习进阶:自然语言处理
自然语言处理(Natural Language Processing,NLP)是人工智能领域中的一个重要分支,涉及到处理和理解人类语言的方法和技术。随着深度学习的快速发展,NLP的研究和应用也在不断进步。 在Python中,有许多强大的…...
STM32单片机基本原理与应用(三)
矩阵键盘工作原理 矩阵键盘由多个独立按键组成,按键的一端接地,一端接MCU的GPIO。当按键没有被按下时,电路其实是一个断路,将单片机该引脚设置成输入上拉状态,读到的电平为高电平。当按下按键时,引脚会被拉…...
Android studio布局详解
文章目录 一、Android studio布局详解二、Android studio六大布局案例三、优缺点四、热门文章 一、Android studio布局详解 Android Studio是一种用于开发Android应用程序的集成开发环境(IDE),用于设计和编辑Android应用程序的用户界面布局。在Android …...
第四篇:怎么写express的路由(接口+请求)
🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 📘 引言: Ǵ…...
算法学习记录:有关树的基础
前言: 算法学习记录不是算法介绍,本文记录的是从零开始的学习过程(见到的例题,代码的理解……),所有内容按学习顺序更新,而且不保证正确,如有错误,请帮助指出。 学习工具…...
2. 《大数据之路:阿里巴巴大数据实践》学习笔记,持续更新ing
笔记链接(飞书):https://t0s016els2a.feishu.cn/docx/JrNydGljUonH1ExcGCpcoC8unTb 密码:r661391 该书籍部分目录如下: 文章目录 第1篇 数据技术篇第2章 日志采集2.1 浏览器的页面日志采集2.1.1 页面浏览日志采集流程2.1.2 页面交互日志采集…...
编程笔记 html5cssjs 062 JavaScrip如何使用
编程笔记 html5&css&js 062 JavaScrip如何使用 一、 引入JavaScript二、DOM操作三、事件处理四、数据验证五、异步编程六、使用库和框架七、模块化开发小结 开始学习使用JavaScript进行前端开发的基本步骤和常见实践。 这里先列示基本的步骤和内容,后面慢慢…...
【前端基础--7】
DOM操作 DOM,全称(Document Object Model),文档对象模型。 提供操作HTML的方法(操作页面元素) 获取节点 --- 操作元素标签 <body><div id"box">我是盒子标签</div><p class"text"&g…...
微信小程序如何搜索iBeacon设备
1.首先在utils文件夹下创建bluetooth.js和ibeacon.js 2.在 bluetooth.js文件中写入 module.exports {initBluetooth: function () {// 初始化蓝牙模块wx.openBluetoothAdapter({success: function (res) {console.log(蓝牙模块初始化成功);},fail: function (res) {console.l…...
JVM篇:垃圾回收算法
标记清除 通过遍历GC Root后得到不再被引用的对象,对没被引用的对象做一个标记处理,然后对其进行清除。 优点:速度快 缺点:会产生内存碎片,可能会导致空闲的内存足够保存对象,但由于不连续而保存失败。 标…...
2024年数学建模美赛 分析与编程
2024年数学建模美赛 分析与编程 1、本专栏将在2024年美赛题目公布后,进行深入分析,建议收藏; 2、本专栏对2023年赛题,其它题目分析详见专题讨论; 2023年数学建模美赛A题(A drought stricken plant communi…...
05-Nacos-配置中心接入
1、pom依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency> 2、配置文件 spring:application:name: nacos-config## 当前环境,这个和…...
服务端开发小记02——Maven
这里写目录标题 Maven简介Maven在Linux下的安装Maven常用命令 Maven简介 Apache Maven Project是一个apache的开源项目,是用于构建和管理Java项目的工具包。 用Maven可以方便地创建项目,基于archetype可以创建多种类型的java项目;Maven仓库…...
DjangoURL调度器(一)
一、介绍 当一个用户请求 Django 站点的一个页面,下面是 Django 系统决定执行哪个 Python 代码使用的算法: Django确定要使用的根URLconf模块,一般是在settings中的ROOT_URLCONF设置的值,但是如果传入 HttpRequest 对象具有一个ur…...
Typora 无法导出 pdf 问题的解决
目录 问题描述 解决困难 解决方法 问题描述 我的 Windows 下,以前(Windows 11) Typora 可以顺利较快地由 .md 导出 .pdf 文件,此功能当然非常实用与重要。 然而,有一次电脑因故重装了系统(刷机&#x…...
uniapp封装公共的方法或者数据请求方法
仅供自己参考,不是每个页面都用到这个方法,所以我直接在用到的页面引用该公用方法: 1、新建一个util.js文件 export const address function(options){return new Promise((resolve,reject)>{uni.request({url:"https://x.cxniu.…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
