超全面!性能测试:JMeter分布式压测环境部署

Windows分布式部署

1、背景

以后大家如果是从事专职性能测试,一定要进行分布式压测;

场景:一台控制机和两台执行机,做分布式,要求控制机启动,两台执行机执行,反馈结果;

最贴近工作情况:

控制机:作为办公电脑,工作测试电脑

执行机:代理机,负载机: 可以直接用服务器的电脑;(服务器的电脑比较干净)肉鸡

jmeter分布式执行原理:

1.jmeter分布式测试时,选择其中一台作为控制机;其它机器作为代理机;

2.执行时,控制机会把脚本发送到每台代理机上,代理机拿到脚本后就开始执行,代理机执行时不需要启动jmeter界面,可以理解它是通过命令行模式执行的。

3.执行完成后,代理机会把结果回传给控制机,控制机会收集所有代理机的信息并汇总;

代理机配置:

1.代理机需要安装jmeter(并安装jdk)

2.启动代理机上的jmeter-server.bat文件;

3.多台代理及,重复1~3步;

配置:控制机ip和代理及IP,设置完运行即可;

2.安装环境变量

下载JDK,可以在oracle官网下载,也可以使用百度网盘下载

链接: 百度网盘 请输入提取码

提取码: p5gt

3.配置环境变量

将下载下来的JDk进行安装,添加JAVA_HOME

填写JDK存放路径(根据自己路径进行填写)

添加CLASSPATH

 

perl

复制代码

.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

添加path,填写Jmeter存放路径(根据自己路径进行填写)

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

 

perl

复制代码

%JAVA_HOME%\bin %JAVA_HOME%\jre

4.修改Jmeter配置文件

配置:控制机ip和代理及IP,设置完运行即可;

1.配置代理机的ip和端口;

2.设置控制机:

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

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

5.启动分布式服务

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

jmeter版本比较新,需要先执行create-rmi-keystore.bat,生成rmi_keystore.jks即可;

生成完成后直接启动ok

如下图看到slave已经启动。

2.控制机启动jmeter;

备注:

1.修改完端口后要重启jmeter;

2.分布式压测设定用户后,每台代理机都是运行的虚拟用户数;如果线程组中的虚拟用户数是500,若有两台负载机,则执行取样器的次数为500*2=1000次;

3.分布式压测,一定要在同一个局域网;

4.查看相关端口是否占用,查看防火墙是否关闭;

Linux内网环境分布式压测部署

1、背景

XX项目由于在私有云上部署,还未开放互联网,项目组决定在内网环境进行压测环境搭建,提前暴露内网环境下项目接口的性能瓶颈。

2、机器分配

内网环境机器,,通过堡垒机链接跳板机,,在通过跳板机链接20台内网机器进行操作,

一共分配了20台centos机器,部署两个集群,每个集群10台机器,一台控制机、10台压力机(控制机也做压力机)

3、压力机jmeter部署

3.1 jdk安装

1.由于是内网环境,无法通过yum源进行下载,需要通过xshell\xftp将文件先上传到跳板机,在通过跳板机上传到对应机器

2.解压jdk到指定目录,这里使用/usr/bin/java/目录

  1. /etc/profile添加环境变量

#java environment

export JAVA_HOME=/usr/java/jdk1.8.0_144

export CLASSPATH=.:JAVAHOME/jre/lib/rt.jar:JAVA_HOME/jre/lib/rt.jar:JAVAH​OME/jre/lib/rt.jar:JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export PATH=PATH:PATH:PATH:JAVA_HOME/bin

  1. 执行环境变量 source /etc/profile
  2. 验证jdk安装成功

java -version

3.2jmeter安装

  1. 在linux下建立安装路径:/root/jmeter
  2. 上传jmeter安装包到/root/jmeter路径下并解压
  3. 建立脚本目录:/root/jmeter/scripts,脚本上传的地址
  4. 建立报告目录:/root/jmeter/report,报告生成存放目录

5./etc/profile添加环境变量

#jmeter environment

export JMETER_HOME=/usr/local/apache-jmeter-5.4.3

export CLASSPATH=JMETERHOME/lib/ext/ApacheJMetercore.jar:JMETER_HOME/lib/ext/ApacheJMeter_core.jar:JMETERH​OME/lib/ext/ApacheJMeterc​ore.jar:JMETER_HOME/lib/jorphan.jar:$CLASSPATH

export PATH=JMETERHOME/bin:JMETER_HOME/bin:JMETERH​OME/bin:PATH

  1. 执行环境变量 source /etc/profile
  2. 验证jmeter安装

jmeter -v

以上步骤在Master和Slaves 都进行操作相同的操作

3.3修改压力机配置参数

  1. 修改压力机slaves配置参数,在/root/jmeter/apache-jmeter-5.4.3/bin 目录下修改jmeter.properties文件
  2. 修改 server_port 端口

默认1009

可修改任意端口,但不能已被占用

  1. 修改 server.rmi.port 端口

和 server_port 保持一致即可

  1. 设置 server.rmi.ssl.disable

默认 false,代表需要认证

设置为 true,减少不必要的麻烦

  1. 修改 remote_hosts

remote_hosts=本机IP地址:端口号

  1. 系统在HOSTS文件中进行类似 本机IP 主机名的配置,如10.0.0.23 zhoucentos,否则启动jmeter server会报错!

首先,我们来查看本机ip和hostname

然后通过 vi /etc/hosts进行配置,将ip和hostname配置进去并保存。每台机器都配置

  1. 检查防火墙是否关闭

检查防火墙状态命令:systemctl status firewalld.service

  1. 环境优化

详见章节4

4. 环境优化

1)配置jmeter的使用内存,根据实际服务器和测试需求量来修改

vi /root/jmeter/apache-jmeter-5.4.3/bin/jmeter

166行修改

: "${HEAP:="-Xms8g -Xmx8g -XX:MaxMetaspaceSize=2048m"}"

bin目录下重启;

nohup jmeter-server -Djava.rmi.server.hostname=172.27.16.33 &

验证:

ps -ef | grep jmeter

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

#vi /etc/security/limits.conf

  • soft nofile 102400

  • hard nofile 102400

  • soft nproc 65535

  • hard nproc 65535

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

ulimit -n

3)修改/etc/sysctl.conf文件,并添加:

 

ini

复制代码

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

5.控制机部署

控制机jmeter部署和压力机一样(参考3.1、3.2)

修改控制机配置参数,在/root/jmeter/apache-jmeter-5.4.3/bin 下jmeter.properties文件

如果控制机也测试则加 ,然后修改 server_port 、 server.rmi.port、server.rmi.ssl.disable(和压力机一样步骤)

remote_hosts=压力机IP地址:端口号,压力机IP地址:端口号

多台可以用英文逗号分开,控制机也可以作为压力机

配置mode,去掉前面#

6.执行分布式压测脚本

在全部压力机上执行jmeter后台启动命令:

nohup jmeter-server -Djava.rmi.server.hostname=分压机ip &

任意目录执行全部压力机压测脚本

jmeter -r -n -t /root/jmeter/scripts/**.jmx

执行指定压力机压测(这里172.27.16.20为压力机ip)

sh jmeter -n -t /root/jmeter/scripts/XX.jmx -R 172.27.16.20

7.停止压测程序

cd 进入到JMeter 的 bin 目录下

输入 ./shutdown.sh 命令停止脚本

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

如果想要终止程序,可以执行命令行./shutdown.sh ,通知master终止程序,然后master 再去通知salve停止运行。

8.JMeter+Grafana+Influxdb

这里为了方便我们监控压测过程中的QPS、线程数、95分值,可以使用grafana控制面板来对数据进行展示我们将grafana部署在控制机上;

grafana的部署不在这里细讲,感兴趣的同学可以查看腾讯云的这篇文章;

JMeter+Grafana+Influxdb搭建可视化性能测试监控平台 - 腾讯云开发者社区-腾讯云

  总结

如果你对此文有任何疑问,如果你也需要接口项目实战,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入我们,加入方式在文章的最后面

  自动化测试相关教程推荐:

2023最新自动化测试自学教程新手小白26天入门最详细教程,目前已有300多人通过学习这套教程入职大厂!!_哔哩哔哩_bilibili

2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+_哔哩哔哩_bilibili

测试开发相关教程推荐

2023全网最牛,字节测试开发大佬现场教学,从零开始教你成为年薪百万的测试开发工程师_哔哩哔哩_bilibili

postman/jmeter/fiddler测试工具类教程推荐

讲的最详细JMeter接口测试/接口自动化测试项目实战合集教程,学jmeter接口测试一套教程就够了!!_哔哩哔哩_bilibili

2023自学fiddler抓包,请一定要看完【如何1天学会fiddler抓包】的全网最详细视频教程!!_哔哩哔哩_bilibili

2023全网封神,B站讲的最详细的Postman接口测试实战教学,小白都能学会_哔哩哔哩_bilibili

  总结:

 光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

​​​

​​​

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!

JMeter是一个开源的压力测试工具,可以用于Web应用、SOA服务以及其他HTTP协议的应用程序的性能测试。当需要对系统进行大规模并发压力测试时,我们通常会考虑构建分布式JMeter环境。 ### JMeter分布式压测环境搭建步骤: #### 第一步:准备环境 1. **服务器配置**:首先,你需要一组服务器,每台服务器都需要安装Apache JMeter,并且它们之间应该有稳定的网络连接。 2. **JMeter版本一致性**:确保所有JMeter版本一致,避免因版本差异导致的兼容性问题。 #### 第二步:部署JMeter 1. **服务器上安装JMeter**:通过SSH或其他远程访问工具将JMeter安装包上传到服务器上,然后解压并配置JMeter环境变量。可以参考官方文档或教程进行详细操作。 2. **配置JMeter**:在每个JMeter实例中配置监听地址和端口。例如,在命令行中运行 `jmeter -n -t test计划.jmx -l results.jtl` 来启动测试,这里 `-n` 指示无GUI模式运行,`-t` 表示测试脚本的位置,`-l` 表示结果保存文件位置。 #### 第三步:创建并分发测试计划 1. **设计测试计划**:使用JMeter的图形界面或脚本语言编写测试计划,包括URL、请求头、参数、断言等。确保测试计划能覆盖所需的所有功能和场景。 2. **导出测试计划**:将测试计划导出为.jmx格式文件,以便于跨节点执行。 3. **分发测试计划**:将测试计划文件复制到所有参与测试的服务器上。 #### 第四步:协调与控制 1. **负载均衡**:根据实际需求分配任务给各个服务器,可能需要使用额外的工具如LoadRunner或Zabbix等来监控和控制流量分配。 2. **日志分析**:为了更好地理解系统响应以及发现潜在瓶颈,设置详细的日志记录,并定期查看日志信息。 #### 第五步:执行分布式测试 1. **同步执行**:通过脚本或者其他自动化手段触发所有服务器同时开始执行测试计划。 2. **监视与调整**:使用JMeter自带的日志功能或外部监控工具监视测试过程,必要时调整服务器资源分配或测试策略。 #### 第六步:分析结果 1. **聚合报告**:通过JMeter的聚合报告功能合并各服务器的测试结果,生成全面性能测试报告。 2. **优化调整**:基于测试结果分析系统性能瓶颈,针对性地优化代码或架构设计。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值