搭建JMeter分布式压测环境轻松应对

news2024/12/27 10:21:13

引言

您想要提高您的应用程序的性能吗?想要确保它在高负载下仍然能够正常工作吗?那么,您一定需要一个可靠的性能测试工具来帮助您完成这个任务。

JMeter是一个广泛使用的性能测试工具,但是如果您的测试需求变得更加复杂和庞大,那么单机运行可能无法满足您的需求。那么有没有一种方法可以提高测试效率呢?

当然有!搭建JMeter分布式压测环境是一个明智的选择。通过增加多台计算机节点,您可以将测试负载分散到不同的计算机上,从而有效地提高测试效率,并且节省大量时间和精力。

在本篇文章中,我们将为您详细介绍如何搭建JMeter分布式压测环境,并分享一些实用的技巧和经验,助您轻松应对压力山大的测试任务。让我们开始吧!

windows环境部署

1.安装环境变量

下载JDK,可以在oracle官网下载

2.配置环境变量

将下载下来的JDk进行安装,添加JAVA_HOME 填写JDK存放路径(根据自己路径进行填写),如C:\Program Files\Java\jdk1.8.0_202

添加JMETER_HOME 填写Jmeter存放路径(根据自己路径进行填写),如D:\办公\3.软件\jmeter5.1+java1.8\apache-jmeter-5.1.1

 添加CLASSPATH,将下面内容加在最后

;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JMETER_HOME\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-2.0.jar

添加Path,将下面内容加在最后

%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin
%JMETER_HOME%\bin

3.修改Jmeter配置文件

进入Jmeter配置文件中D:/**/apache-jmeter-5.3/bin/jmeter.properties

server.rmi.ssl.disable=true      # 将false改成true,去掉前面#号

添加发压机(这一步是添加使用Jmeter分布式需要启动的发压机,IP+端口):

remote_hosts=xxx.168.xxxx.2:1099,xxxx.168.xxx.3:1099,xxxx.168.xx.4:1099

4.启动jmeter

Jmeter工具使用请看下面文章:Jmeter压测工具入门篇

5.启动分布式服务

在slave机(发压机)上启动客户端jmeter-server.bat

 

如下图看到slave已经启动。

slave机启动后,在master选择 运行,远程启动/远程启动所有,就可以分布式的多台slave机一起压测了。

Linux环境部署

1.安装JDK+Jmeter

安装jmeter之前需要先安装jdk,下载jdk(可以使用下面地址进行下载,也可以去官网下载,官网需要登录oracle)

链接: https://pan.baidu.com/s/1Gu5pwMxyxGxN3X94E5NKYg?pwd=ai6j

(内网部署只需要手动把JDK和Jmter包上传到内网解压,其余步骤不变)

解压jdk,这里安装到/usr/local/java/目录(安装路径根据个人喜好,但要和环境变量中的地址匹配)

tar -zxvf jdk-8u181-linux-x64.tar.gz

配置环境变量,修改配置文件vi /etc/profile,文本最后加上以下内容

JAVA_HOME=/usr/local/java/jdk1.8.0_181
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH

 

使环境变量生效

source /etc/profile

验证jdk配置成功

java -version

使用命令直接安装Jmeter

wget https://mirrors.bfsu.edu.cn/apache//jmeter/binaries/apache-jmeter-5.4.3.tgz

 

如果是内网环境,需要手动上传Jmeter安装包,下载最新版Jmeter

解压jmeter,这里安装到/usr/local目录(安装路径根据个人喜好,但要和环境变量中的地址匹配)

tar -zxf apache-jmeter-5.4.3.tgz

建立脚本目录:/root/jmeter/scripts,#脚本上传的地址

建立报告目录:/root/jmeter/report,#报告生成存放目录

配置jmeter环境变量,vi /etc/profile,文本最后加上以下内容

export JMETER_HOME=/usr/local/apache-jmeter-5.4.3
export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$CLASSPATH
export PATH=$JMETER_HOME/bin:$PATH

 

使环境变量生效

source /etc/profile

验证jmeter配置成功

jmeter --version

2.环境优化

1.配置jmeter的使用内存,根据实际服务器和测试需求量来修改,最大为服务器内存的一半

vi /usr/local/apache-jmeter-5.4.3/bin/jmeter

 

2.优化linux内存参数,修改limits.conf文件:

vi /etc/security/limits.conf

最后添加(不同操作系统可能不一样,下面为centos):

*               soft    nofile            102400
*               hard    nofile            102400
*               soft    nproc             65535
*               hard    nproc             65535

重新打开SSH终端,执行如下命令查看是否生效

ulimit -n

3.修改Linux内核参数,修改/etc/sysctl.conf文件:

vi  /etc/sysctl.conf

并添加以下内容:

net.ipv4.tcp_syncookies = 0
fs.file-max = 12553500
fs.nr_open = 12453500
kernel.shmall= 1048576
kernel.shmmax = 1887436
kernel.msgmax = 65536
kernel.sysrq = 0
kernel.pid_max= 65536
net.core.netdev_max_backlog = 2000000
net.core.rmem_default = 699040
net.core.rmem_max = 50331648
net.core.wmem_default = 131072
net.core.wmem_max = 33554432
net.core.somaxconn = 65535
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_mem = 1048576 1572864 2097152
net.ipv4.tcp_rmem = 4096 4194304 8388608
net.ipv4.tcp_wmem = 4096 4194304 8388608
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_window_scaling = 1
vm.swappiness = 0
#TCP connection recovery
net.ipv4.tcp_max_tw_buckets = 6000000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.route.max_size = 5242880
net.ipv4.ip_forward = 1
#0表示不开启检查时间错,建议设置0
net.ipv4.tcp_timestamps = 0
#开启对于TCP时间戳的支持,若该项设置为0,则下面一项设置不起作用
#TCP connection manager
net.ipv4.tcp_max_syn_backlog = 655360
net.ipv4.tcp_syn_retries = 6
net.ipv4.tcp_retries1 = 3
net.ipv4.tcp_retries2 = 6
#TCP keepalive
net.ipv4.ip_local_port_range = 1025 65534
net.ipv4.tcp_keepalive_time = 30
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3

 

输入下面的命令,让内核参数生效:

sysctl -p

3.修改Jmeter配置文件

进入Jmeter配置文件中D:/**/apache-jmeter-5.3/bin/jmeter.properties

server.rmi.ssl.disable=true      # 将false改成true,去掉前面#号

添加负载机(这一步是添加使用Jmeter分布式需要启动的负载机,IP+端口):

remote_hosts=xxx.168.xxxx.2:1099,xxxx.168.xxx.3:1099,xxxx.168.xx.4:1099

 

4.编写Jmeter脚本

通过Windows把要压测的Jmeter脚本调试完成,保存为****.jmx文件,上传到Linux服务。

5.启动Jmeter

1)先分别启动slave(所有压测机)上的服务,命令如下(多网卡需要指定ip)

nohup jmeter-server -Djava.rmi.server.hostname=172.168.xxx.2 &  #压测机IP

2)启动master,执行以下命令启动jmeter

jmeter -r -n -t ***.jmx -l test.jtl
参数说明:
-n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter
-t 测试文件 -> 要运行的 JMeter 测试脚本文件
-l 日志文件 -> 记录结果的文件
-r 代表全部agent启动并参与测试

3)如果要启动指定发压机,执行以下命令

jmeter -n -t ***.jmx -l test.jtl -R xxxx.168.xx,xxxx.168.xx,xxxx.168.xx
参数说明:
-n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter
-t 测试文件 -> 要运行的 JMeter 测试脚本文件
-l 日志文件 -> 记录结果的文件
-R 指定的agent启动并参与测试

6.停止Jmeter

进入到JMeter 的 bin 目录下,输入 ./shutdown.sh 命令停止脚本

注:如果在分布式压测过程中,想要终止压测,千万不要在Linux上按 ctrl + c 强制终止程序,这样会知道主程序挂了之后,从机未接受到执行,会一直持续运行。当你再次从主机上运行脚本,从机仍然会在上一个脚本的程序中运行,这时需要去杀掉进程。

7.打包查看测试报告

将linux下的report打包成zip,然后导出到windows下查看index.html测试报告

 

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

 

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

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

相关文章

数据结构与算法编程题35

用按层次顺序遍历二叉树的方法&#xff0c;统计树中具有度为1的结点数目。 #define _CRT_SECURE_NO_WARNINGS#include <iostream> using namespace std;typedef char ElemType; #define ERROR 0 #define OK 1 #define Maxsize 100 #define STR_SIZE 1024typedef struct B…

Google Chrome访问出现 NET::ERR_CERT_INVALID

Google Chrome访问出现 NET::ERR_CERT_INVALID然后访问不了当前网站&#xff0c;这个是由于证书失效了&#xff0c;临时解决方式是&#xff1a; 第一种方案&#xff1a; 在Chrome提示“您的连接不是私密连接”页面的空白区域点击一下&#xff0c;然后输入“thisisunsafe”(页…

[CustomMessages] section

[CustomMessages] section用来定义自定义的一些{cm:}常量. 一个定义和使用的例子。 [CustomMessages] CreateDesktopIconCreate a &desktop icon[Tasks] Name: desktopicon; Description: "{cm:CreateDesktopIcon}"CustomMessages是支持带参数的&#xff0c;从…

「Verilog学习笔记」状态机-重叠序列检测

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 读入数据移位寄存&#xff0c;寄存后的数据与序列数做对比&#xff0c;相等则flag为1&#xff0c;不等则为0 timescale 1ns/1nsmodule sequence_test2(input wire clk ,in…

Ascend C 算子开发遇到的问题及解决方法

摘要&#xff1a;在学习Ascend C算子开发进阶课程的时候&#xff0c;进行Ascend C自定义算子工程、算子调用等实验&#xff0c;在开发环境中遇到了一些问题&#xff0c;在这里记录一下。 首先如果在启智社区CANN版本为6.3 &#xff0c;要进行Ascend C算子开发&#xff0c;需要…

TA-Lib学习研究笔记——Volume Indicators (四)

TA-Lib学习研究笔记——Volume Indicators &#xff08;四&#xff09; 1.AD Chaikin A/D Line 量价指标 函数名&#xff1a;AD 名称&#xff1a;Chaikin A/D Line 累积/派发线&#xff08;Accumulation/Distribution Line&#xff09; 简介&#xff1a;Marc Chaikin提出的一…

C++ 学习之匿名名字空间的使用细节

匿名命名空间&#xff08;anonymous namespace&#xff09;是C中的一种特殊命名空间&#xff0c;它没有显式的名称。匿名命名空间可以用来定义仅在当前文件中可见的全局变量、函数和类。 由于没有名字&#xff0c;所以相当于直接引入&#xff0c;但是没有引入定义 如果发生冲…

Influx集群解决方案(Influx Proxy篇)

InFluxDB 集群搭建 本次搭建使用influx proxy 介绍 github地址:https://github.com/chengshiwen/influx-proxy/ Influx Proxy 是一个基于高可用、一致性哈希的 InfluxDB 集群代理服务&#xff0c;实现了 InfluxDB 高可用集群的部署方案&#xff0c; 具有动态扩/缩容、故障恢复…

JRT和检验共用的打印层实现

之前对接的打印和导出是C#实现的&#xff0c;如果要完全Java化就需要用Java把打印元素绘制协议用Java实现&#xff0c;这次介绍实现主体搭建&#xff0c;最终使JRT达到完全信创和跨平台目标。到这篇后&#xff0c;所有的Java难题都解决完毕&#xff0c;几天到几周之内就可以把打…

Echarts大屏可视化_04 横向柱状图模块的引入和开发

模块的引入 1.寻找官方示例引入 ECharts官方实例入口 2.引入示例 ECharts 示例 可从这里直接进入 标题、提示信息、图例都不需要所以直接删掉 <div class"column"><div class"panel bar2"><h2>柱状图-技能掌握</h2><div cla…

项目动态 | 十一月重点上线项目集锦

武清联创商会 【应用场景】商协会资源对接服务平台&#xff1b; 【核心功能】 l 利用资源对接系统&#xff0c;用户可在平台内发布自己的人脉信息、个性化标签&#xff0c;通过对接获得收益&#xff0c;实现人脉增值&#xff1b; l 利用信息发布系统&#xff0c;用户可直观…

UEFI与ESKII源代码分析

这是一本未出版的电子书&#xff0c;是UEFI BIOS从业者的非常重要的参考书籍。需要的朋友可以联系我。

微服务实战系列之EhCache

前言 书接前文&#xff0c;继续深耕。上一篇博主对Redis进行了入门级介绍&#xff0c;大体知道了Redis可以干什么以及怎么使用它。 今日博主继续带着大家学习如何使用EhCache&#xff0c;这是一款基于Java的缓存框架。 微服务实战系列之Redis微服务实战系列之Cache微服务实战…

主成分分析例题 (多元统计分析期末复习)

例一 给定X的协差阵&#xff0c;对其进行主成分分析, &#xff08;1&#xff09;求出每个主成分的贡献率&#xff1b; &#xff08;2&#xff09;求出每个原始变量的信息提取率&#xff1b; 解&#xff1a;对于主成分分析的题&#xff0c;一般来说&#xff0c;题目给定一个协方…

mybatis关于namespace以及id以及Mapper接口命名的说明(了解)

1、建库建表 CREATE DATABASE mybatis-example;USE mybatis-example;CREATE TABLE t_emp(emp_id INT AUTO_INCREMENT,emp_name CHAR(100),emp_salary DOUBLE(10,5),PRIMARY KEY(emp_id) );INSERT INTO t_emp(emp_name,emp_salary) VALUES("tom",200.33); INSERT INTO…

使用Jetty编写RESTful接口

一、依赖 <!--Jetty服务器的核心依赖项&#xff0c;用于创建和管理服务器。--><dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-server</artifactId><version>9.4.43.v20210629</version></dependency…

Linux scatterlist 详解

源码基于&#xff1a;Linux 5.4 约定&#xff1a; 芯片架构&#xff1a;ARM64内存架构&#xff1a;UMACONFIG_ARM64_VA_BITS&#xff1a;39CONFIG_ARM64_PAGE_SHIFT&#xff1a;12CONFIG_PGTABLE_LEVELS &#xff1a;3 0. 前言 之前在《Linux DMA... 零拷贝》博文分享了DMA 技…

程序员养生之道

程序员养生之道——如何保持健康的生活方式 摘要&#xff1a; 随着互联网行业的快速发展&#xff0c;越来越多的人选择从事程序员这个职业。然而&#xff0c;长时间的工作和高强度的压力容易导致程序员出现亚健康状况&#xff0c;如头发稀疏、视力下降、肥胖等问题。因此&#…

字节大佬整理测试用例编写规范

目录 1.1目的 1.2使用范围 二 测试用例编写原则 2.1系统性 2.2连贯性 2.3全面性 2.4正确性 2.5符合正常业务惯例 2.6仿真性 2.7容错性&#xff08;健壮性&#xff09; 三 测试用例设计方法 3.1 等价类划分法&#xff1a; 3.2 边界值分析法&#xff1a; 3.3 因果图…

python简单通讯录

代码&#xff1a; # 定义联系人类 class Contact:def __init__(self, name, phone, street, city, province, postcode):self.name nameself.phone phoneself.street streetself.city cityself.province provinceself.postcode postcodedef __str__(self):return f"…