Jmeter分布式集群搭建与使用

作者:晚笛诶日期:2025/10/16

目录

一、JMeter 简介

核心功能

主要特点

二、JMeter插件扩展安装

三、JMeter分布式集群环境搭建

Jmeter分布式原理:

原理图:

主控机与负载机通信

测试执行流程

环境配置:

配置分布式测试环境

第一种测试机部署在不同的服务器上:

测试机配置:

主控机配置:

第二种测试机通过docker部署在同一台服务器上:

测试机配置:

主控机配置:


一、JMeter 简介

JMeter 是一款开源的性能测试工具,由 Apache 软件基金会开发和维护。最初设计用于测试 Web 应用程序的性能,后来扩展到支持多种协议和应用场景,包括数据库、FTP、SOAP、REST 等。

核心功能
  • 性能测试:支持对 Web 应用、API、数据库等进行负载测试,模拟多用户并发场景。
  • 分布式测试:支持多台机器协同运行测试,模拟更高并发。
主要特点
  • 跨平台:基于 Java 开发,可在 Windows、Linux、macOS 等系统运行。

二、JMeter插件扩展安装

在真实企业压测场景中,我们通常为⼀点⼀点的逐步增加线程数,因此需要安装新的插件来⽀持线程数的配置。

通过插件管理⼯具下载其他插件:

https://jmeter-plugins.org/install/Install/
首先在这个官网中,下载插件管理工具,将其放置在 JMeter 的lib/ext录下,重启进入jmeter之后,就能看到右上角有一个蝴蝶标致,点开就可以安装想要的其他插件了。

1)下载其他监听器插件


2)下载线程组插件

点击ApplyChangesandRestartJMeter等待下载完成并重启JMeter.这个时候就可以看到新安装的插件。

三、JMeter分布式集群环境搭建

前言:本人在最开始使用jmeter进行性能压测的时候,选择Windos环境进行压测,因为Windos环境下有GUI图面,观测压测情况比较明显,操作也比较简易,但是存在一个弊端就是QPS上去之后,在高并发的场景下,单机压测会出现临时端口耗尽的问题,导致任务下发失败,此时就需要部署分布式集群环境来解决单机临时端口不足的问题。

Jmeter分布式原理:

JMeter分布式测试通过多台机器协同工作来模拟高并发负载,主控机(Master)负责下发测试计划和收集结果,而测试机(Slave)执行实际请求生成。

原理图:

主控机与负载机通信

  • 主控机和测试机通过RMI(远程方法调用)协议通信,默认端口为1099。
  • 主控机将测试计划分发到所有测试机,测试机接收后独立执行。
  • 测试结果数据会实时或分批传回主控机进行聚合。

测试执行流程

  • 主控机启动测试时,将.jmx文件序列化并发送到所有测试机。
  • 每台测试机使用相同的测试计划,但根据分配的线程数生成独立负载,例如主控机启动了600个并发线程,如果有3台测试机,主控机可能会将600线程平均分配,每台测试机执行200线程。
  • 测试机之间不直接通信,仅与主控机交互。

环境配置:

前言:本人使用最开始使用windos本地机器作为控制机,在一台Linux服务器上通过Docker搭建了三台测试机来搭建分布式集群,这里也可以把测试机搭建在不同的服务器上(本人偷个小懒,图方便就使用一台服务器了),但是由于公司网络防火墙的限制,本地不能访问远程服务器,最终就都在Linux环境下搭建分布式集群了,同时下面会列出两种集群搭建方式,第一种是测试机部署在不同的服务器上,第二种是测试机通过docker部署在同一台服务器上。

配置分布式测试环境
  • 所有机器需在同一个子网,关闭防火墙或开放RMI端口(默认1099)。
  • 确保主控机能通过IP或主机名访问所有测试机机。
第一种测试机部署在不同的服务器上:
测试机配置:

Jmeter在所有测试机上添加配置,打开bin/目录下的 jmeter.properties 文件,在每台负载机的jmeter.properties中设置:

1server_port=1099
2server.rmi.ssl.disable=true
3 
4
主控机配置:

jmeter.properties中列出所有测试机IP

1remote_hosts=192.168.1.101,192.168.1.102
2 
3

启动主控机服务:
如果是在Linux环境上部署的主控机,需要开两个会话,其中一个会话启动服务,另外一个会话来下发测试计划和收集结果。

以下为各自会话启动命令:

1、./jmeter-server

2、./jmeter -n -t 刷新性能测试计划.jmx -R 192.168.1.101:1099,192.168.1.102:1099 -l result.jtl -e -o test/

第二种测试机通过docker部署在同一台服务器上:

首先通过dockerfile构建出需要的jmeter镜像,以下为本人测试期间编写的dockerfile,可以根据自己的实际情况调整。

1、创建dockerfile:

1FROM registry.cn-hangzhou.aliyuncs.com/acs/centos:7
2
3ARG JMETER_VERSION=5.5
4ENV JMETER_HOME=/opt/apache-jmeter-${JMETER_VERSION}/apache-jmeter-${JMETER_VERSION}
5ENV PATH=$JMETER_HOME/bin:$PATH
6
7
8RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-Base.repo && \
9    sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-Base.repo && \
10    yum makecache fast && \
11    yum -y update && \
12    yum -y install wget curl tar && \
13    yum clean all
14
15COPY apache-jmeter-${JMETER_VERSION}.tgz /tmp/
16RUN tar -xzf /tmp/apache-jmeter-${JMETER_VERSION}.tgz -C /opt && \
17    rm /tmp/apache-jmeter-${JMETER_VERSION}.tgz && \
18    chmod +x ${JMETER_HOME}/bin/jmeter ${JMETER_HOME}/bin/jmeter-server
19
20COPY jdk-8u461-linux-x64.tar.gz /tmp/
21RUN tar -xzf /tmp/jdk-8u461-linux-x64.tar.gz -C /opt && \
22    rm /tmp/jdk-8u461-linux-x64.tar.gz && \
23    alternatives --install /usr/bin/java java /opt/jdk1.8.0_461/bin/java 1 && \
24    alternatives --install /usr/bin/javac javac /opt/jdk1.8.0_461/bin/javac 1
25
26WORKDIR /jmeter
27
28
29COPY entrypoint.sh /entrypoint.sh
30RUN chmod +x /entrypoint.sh
31
32ENTRYPOINT ["/entrypoint.sh"]
33

2、创建dockerfile钟使用的entrypoint.sh脚本:

1#!/bin/bash
2set -e
3
4if [[ "$1" == "jmeter" && "$2" == "-n" ]]; then
5    exec jmeter "$@"
6fi
7
8if [[ "$MODE" == "slave" ]]; then
9    export JVM_ARGS="-Xms${Xms:-256m} -Xmx${Xmx:-1g} ${JVM_EXTRA_ARGS:-}"
10    exec jmeter-server \
11        -Dserver_port=${SERVER_PORT:-1099} \
12        -Dserver.rmi.localport=${RMI_LOCAL_PORT:-50000} \
13        -Dserver.rmi.port=${SERVER_RMI_PORT:-1099} \
14        -Djava.rmi.server.hostname=${HOST_IP:-$(hostname -i)}
15fi
16
17exec "$@"
18

Dockerfile个别参数注意点!!!!

1、所有测试机使用jdk版本,必须和控制机下发的测试计划中使用的jdk版本保持一致,不然会出现一些错误,导致测试机不能正常执行任务。

2、下载jmeter镜像和需要用到的额外插件如果网络好的情况下可以在构建进行的时候下载,如果不好的情况下可以和我一样,在window环境下安装好jmeter工具和扩展插件,然后打包自己jmeter安装路径下的所有包上传到自己的服务器上,然后再构建镜像的时候copy进去。

3、JMETER_VERSION参数的值可以根据自己下载的jmeter版本进行修改。

3、镜像构建好之后,可以通过如下命令启动jmter实例。

1docker run -d --name slave3   -e MODE=slave -e HOST_IP=192.168.1.12  -e SERVER_PORT=1013 -e RMI_LOCAL_PORT=50003 -e SERVER_RMI_PORT=1013 -e Xms=512m -e Xmx=1g -p 1013:1013 -p 50003:50003  my-jmeter:5.5-centos
2

可以通过这条命令来启动多个jmeter实例,只需要修改IP和Port即可,jmeter的RMI默认端口为1099,但是咋们也可以自己修改RMI端口,修改参数SERVER_RMI_PORT端口的值即可。

测试机配置:

由于已经通过docker在启动实例的时候配置好环境变量了,这里就不需要和第一种方式一样去jmeter.properties中修改server_port参数,只需要修改server.rmi.ssl.disable=true。

主控机配置:

这里主控机配置与第一种方式有一点不同,在jmeter.properties中列出所有测试机IP的时候,因为没有使用RMI通信的默认端口,所以需要在ip后面带上端口:

1remote_hosts=192.168.1.101:1013,192.168.1.102:1015
2 
3

主控机的启动方式和第一种一样,这里就不在重复了,只需要修改参数中的端口,改为自己测试机使用的RMI通信端口。

最终在测试计划运行结束之后,主控机会出现xxx.jtl文件,可以下载到windos下,通过GUI的Jmeter打开来查看执行情况,也可以下载上面配置的报告生产路径的内容来查看。


Jmeter分布式集群搭建与使用》 是转载文章,点击查看原文


相关推荐


PyQt5 QTreeWidget 深度解析:树形列表框的完整指南
三雷科技2025/10/15

PyQt5 QTreeWidget 深度解析:树形列表框的完整指南 1. QTreeWidget 概述与设计哲学 1.1 什么是 QTreeWidget? QTreeWidget 是 PyQt5 中用于显示层次化数据的高级控件,它继承自 QTreeView,提供了一个基于项目的树形视图。与平面列表不同,QTreeWidget 能够直观地展示父子关系,非常适合文件系统、组织结构、分类数据等层次化信息的展示。 核心设计理念:QTreeWidget 的设计遵循了"层次化数据展示"原则,通过树形


Easysearch 冷热架构实战
极限实验室2025/10/14

在之前的文章中,我们介绍了如何使用索引生命周期策略来管理索引。如果要求索引根据其生命周期阶段自动在不同的节点之间迁移,还需要用到冷热架构。我们来看看具体如何实现。 冷热架构 冷热架构其实就是在 Easyearch 集群中定义不同属性的节点,这些节点共同组成冷热架构。比如给所有热节点一个 hot 属性,给所有冷节点一个 cold 属性。在 Easyearch 中分配节点属性是通过配置文件(easysearch.yml)来实现的,比如我要定义一个热节点和一个冷节点,我可以在对应节点的配置文件中添加如


如何设计一个架构良好的前端请求库?
sorryhc2025/10/12

一、写在前面(抛出思考题) 过去的时间,你刷遍了面试题,在公司中工作了很多年,基于axios二次封装单项目级别的请求文件手到擒来。 你有没有想过?你是一个前端团队的资深老人,随着公司业务不断发展,各种各样的前端项目用着不同的请求技术方案。 A项目比较老,用的xhr; B项目用了axios,拥抱开源; C项目因为小王拥抱原生的理念,使用了fetch; 现在团队需要技术标准化,统一前端请求方案,将所有的请求集成到一个包里,如何设计技术方案,可以让这个包很健壮,未来很好维护? 这其实和大公司业务面广的


C/C++黑客帝国代码雨
Want5952025/10/10

写在前面 数字雨,又被称为“黑客帝国雨”,是一种经典的视觉效果,常用于表现科幻、科技感十足的场景。这种效果最初在电影《黑客帝国》中出现,以绿色字符从屏幕顶端不断下落的方式,营造出一种神秘而充满未来感的氛围。本文将介绍如何使用C语言在Windows控制台中实现一个简易的数字雨效果。通过这篇文章,你不仅能了解如何利用控制台API进行绘图操作,还能体会到字符动画背后的技术逻辑与美感。 系列文章 序号直达链接1C/C++李峋同款跳动的爱心2C/C++跳动的爱心3C/C++经典爱心4C/C++满


深入浅出 Compose 测量机制
Pika2025/10/9

自从换了新工作后,好久没有写博客了,今天终于能有时间写点东西,Compose作为Android新一代UI框架,已经得到了很多公司的认可,未来市场对Compose的要求也逐步提高。如果大家对Compose有兴趣,也欢迎后台私信我,字节移动OS招聘Compose框架的二次定制开发的Android小伙伴,一起把Compose做大做强吧! UI框架的测量流程 对于UI框架来说,测量布局与绘制可谓是非常重要的三个话题,对于Compose来说也不例外,本章我们将从着Compose的原理出发,来聊一下最重要


大数据毕业设计选题推荐-基于大数据的全球产品库存数据分析与可视化系统-大数据-Spark-Hadoop-Bigdata
IT研究室2025/10/8

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python项目 安卓项目 微信小程序项目 文章目录 一、前言二、开发环境三、系统界面展示四、代码参考五、系统视频结语 一、前言 系统介绍 本系统是一个基于大数据技术的全球产品库存数据分析与可视化系统,采用Hado


【Linux】线程的互斥
羚羊角uou2025/10/6

因为线程是共享地址空间的,就会共享大部分资源,这种共享资源就是公共资源,当多执行流访问公共资源的时候,就会出现各种情况的数据不一致问题。为了解决这种问题,我们就需要学习线程的同步与互斥,本篇将介绍线程的互斥。 1.相关概念 临界资源:多线程执⾏流被保护的共享资源就叫做临界资源 临界区:每个线程内部,访问临界资源的代码,就叫做临界区 互斥:任何时刻,互斥保证有且只有⼀个执⾏流进⼊临界区,访问临界资源,通常对临界资源起保护作⽤ 原⼦性:不会被任何调度机制打断的操作,该操作只有两态,要么完成,


MySQL Performance Schema详解与实战应用
IT橘子皮2025/10/5

Performance Schema是MySQL内置的性能监控系统,自5.5版本引入以来已成为数据库性能分析与优化的核心工具。本文将全面解析其架构原理、配置方法及典型应用场景,帮助您掌握这一强大的性能诊断利器。 一、Performance Schema核心架构 Performance Schema采用插桩-消费者模型构建,通过轻量级的内存表存储性能数据,对数据库性能影响通常控制在5%以内。其核心组件包括: ​插桩点(Instruments)​​:嵌入MySQL代码的探测点,按层级命名如wai


【Unity笔记】Unity XR 模式下 Point Light 不生效的原因与解决方法
EQ-雪梨蛋花汤2025/10/4

Unity XR 模式下 Point Light 不生效的原因与解决方法 在 Unity 中开发 VR 应用时,经常会遇到一个让人疑惑的现象: 在 编辑器 Game 模式下,场景中的 Point Light(点光源) 可以正常照亮物体。但当启用 Initialize XR on Startup 并通过 VR 设备运行时,Point Light 不再生效,只有 Directional Light(平行光) 仍然有效。 这让很多开发者误以为“材质只支持 Directional Light,而不支持


XYplorer(多标签文件管理器) 多语便携版
东风西巷2025/10/2

XYplorer中文版是一款多标签文件管理器及增强资源管理器的工具,XYplorer文件管理器支持多标签页栏,管理文件时跟使用Chrome之类浏览器一样,从浏览方便性,和切换滑顺程度,要比Windows系统自带的Explorer资源管理器便捷得多.可以大部分程度上替代系统自带的文件管理器.同时,有浏览器快捷键和鼠标快捷. 软件功能 双窗口浏览:支持双窗口浏览,可以同时浏览两个文件夹,方便文件的复制、移动和比较。 高级搜索:支持高级搜索功能,可以根据文件名、大小、日期、属性等多种条件进

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0