吐血整理,性能测试Jmeter分布式压测遇坑总结+解决

news2024/10/6 10:53:23

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

为什么要使用分布式?

做性能测试时,如果被测系统性能比较好,或者系统项目比较大,那么一般都会要求能支持比较高的并发用户数。而我们做性能测试时,发起请求的机器,硬件资源是一定的,不可能配置无限大。

所以,它能发起的并发用户数是有限的,而当我们发起方一台电脑能发起的并发用户数小于我们性能测试期望的并发用户数时,我们就会自然而然想到增加发起方的电脑。增加发起方电脑数量,那么,发起的并发用户数累加,就增大了。

发起方一台电脑,不管是 windows 系统还是 Linux 系统,一般而言,大概能支持 1.5k 左右并发用户,更多并发用户就要采用分布式。

如何配置分布式?
助攻机配置:
①修改 jmeter.properties 文件:
②首先,我们准备多台机器,作为助攻机器;
③然后,检查每台机器上是否安装了 JDK,并且 JDK 版本是否都一致;
④然后,在助攻机器上放置相同版本的 jmeter;
⑤接下来,配置 jmeter.properties 文件;
⑥修改 server_port 端口,自定义一个端口;
⑦修改 server.rmi.ssl.disable=true;
⑧修改 server.rmi.port 端口 ---- 可选;
⑨启动服务:jmeter-server -Djava.rmi.server.hostname=ip_address;
⑩检查防火墙,关闭或开放 自定义的 server_port 端口

主控机器配置:
①修改 jmeter.properties 文件
②修改 remote_hosts,值为助攻机器 ip;
③修改 server.rmi.ssl.disable=true;
④修改 mode=Standard;

分布式机配置注意事项(重要)

分布式的配置,是不是很简单呢?
是的,这个配置实际上一点都不难,如果你要自己练手,按照上面的操作,就能很简单配置成功。但是,当你在企业项目中实战时,还会这么简单吗?
如果你企业的项目,需要支持大几万的并发,要使用几十台助攻机器,是不是就简单重复上面的操作就可以了呢?

答案是否定的。

现在有几十台 Linux 机器,放在你面前,供你去配置为助攻机。数量比较大,完全无法保证每一台都一模一样,所以,我们先要检查机器配置。

1、硬件资源
CPU、内存是一台电脑的核心, 几十台机器,我们完全无法保证每一台都一样,在助攻机的要求中,虽然,没有对 CPU 和内存做要求,但是,如果每台机器能提供的资源不一样,那么能产生的并发用户数量肯定也会不相等。

所以,我们需要找出有机器中,最低配置的机器,然后,以最低配置机器为参考配置 jmeter 的堆栈信息。

通过 top 命令,查看下每个系统的 CPU 和内存信息。

修改 jmeter 的 bin 文件夹中 jmeter 文件 HEAP:=“-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m” 修改堆栈信息中的大小。
不配置,在执行高并发用户数时,jmeter 可能会出现 OOM 问题。

2、系统环境
JDK:
机器多了,每台机器的 JDK 大版本是否一致,可能就是个问题。如果,机器上没有安装,那可以直接去安装指定版本即可,但是,如果机器上已经安装了其他版本的 JDK,并且正运行其他 Java 项目,这个时候怎么办呢?

指定 jmeter 的运行 JDK 版本:
下载解压指定 JDK 版本到 Linux 的 /usr/local 文件夹下, 不要去配置改动系统环境变量。

在 jmeter 的 jmeter 文件中,添加 JAVA_HOME=/usr/local/jdk版本/ 指定 jmeter 运行的 JDK 版本,这样,就不用改动操作系统的 JDK,不影响系统中其他 Java 项目。

Jmeter:
Jmeter 版本;
所有助攻机器上 jmeter 的版本都必须一致;
jmeter.properties 要修改 ssl.disable=true, 端口可以不相同;
如果代码中使用了第三方插件,助攻机器上,也必须有这些插件包;

3、环境变量
jmeter 运行,本身可以不配置 JMETER_HOME 环境变量,但是,当机器多了时,还是建议在所有机器上配置 JMETER_HOME 环境变量。

4、HEAP 配置
机器多了,可能每台机器的内存都不一样, 我们期望助攻机器能产生更大的并发用户数,所以,建议修改每台机器的 HEAP 配置信息,设置为相同。

5、CSV 文件
如果写的 jmeter 脚本中,使用了 CSV 数据文件设置,那么文件的路径,请使用相对路径写法。

jmeter-server 助攻服务在哪个路径下启动,就要在所有的机器上,上传 CSV 文件到该路径下的相对位置。

6、os 操作系统
os 版本:没有要求,可以是不同版本。

7、端口区间
操作系统的端口数量是有限的,不同系统,默认情况下,打开的端口数量可能不相等,这就需要我们去配置一下每台机器上打开的端口范围。

sysctl -a | grep net.ipv4.ip_local_port_range

这个命令可以查看当前机器上,开启的端口范围。

sysctl -w net.ipv4.ip_local_port_range="1024 65534"

然后再执行 sysctl -p 生效。这样,设置每台机器上,开启的端口范围。

sysctl -a | grep net.ipv4.ip_local_port_range

这个命令可以查看当前机器上,开启的端口范围。

8、打开文件数量
操作系统对每个程序能打开的文件数量是有限制的,这个是系统限制,我们可以通过 ulimit -n 看到, 也可以通过 cat /proc/进程id/limit 查看某个进程今天能打开的文件数量限制。

因为性能测试助攻机,也是要发起大量请求的,这有可能要打开大量的文件,如果文件数量限制过小,也会导致问题,所以,我们可以通过 ulimit -n 数量 来修改进程可以打开的文件数量。然后,重启动 jmeter-server 助攻服务,这样,就会以你修改后的数量来做限制了。

9、网络环境
几十台机器,网络配置可能会不一样,如果这些助攻机器到被测服务器之间的网络存在问题,那么,可能就会导致请求压力上不会,甚至出现网络错误。

我们可以在每台助攻机器上,使用 tracepath 被测服务器 来查看助攻机到被测服务器之间的网络情况。如果发现,网络延迟时间很长,那就说明,当前机器,可能网络配置有问题。在使用时,可能就要剔除这台助攻机器。

10、启动服务

在每台助攻机器上执行:

jmeter-server -Djava.rmi.server.hostname=ipaddr 

因为每台的 ip 地址都不一样,所以,这个命令必须一个一个的敲。同时,我们可以加个’&‘ 符号,把命令转换为后台运行。

在主控机器上执行:

java -Xms48g -Xmx48g -XX:MaxMetaspaceSize=2g -jar $JMETER_HOME/bin/ApacheJMeter.jar -n -R xxx:port,xxx:port -t xxx.jmx -l xxxx.jtl -e -o xxdirect
-Xms48g -Xmx48g -XX:MaxMetaspaceSize=2g 

这个是设置主控机器 jmeter 的堆栈信息,这个大小,可以根据自己机器的内存大小灵活修改,但是,这个一定要设置的比较大。如果小了,生成报告的时间就会很长。

$JMETER_HOME/bin/ApacheJMeter.jar 

上面表示自己的 jmeter 路径。

-R xxx:port,xxx:port 

指定助攻机器。可以根据自己的需要指定。如果,不需要采用分布式,就不用这一段,如果要用分布式,就要使用这一段,多台时,就用逗号分隔。

-t xxx.jmx 

你放在主控机器上的 jmeter 脚本文件。

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

成功不是偶然,而是必然。只有坚持不懈地努力奋斗,才能实现自己的梦想。不要害怕失败,因为失败是通向成功的必经之路。要相信自己,充满信心和勇气去迎接挑战。相信你一定可以成为更好的自己!

每一天都是崭新的开始,不要被过去束缚,不要被未来迷惑,把握当下,脚踏实地,坚持奋斗。只有不断努力,才能在生命的舞台上演绎出最精彩的人生。

每一天都是一个崭新的开始,不管你昨天做得好不好,今天都有机会做得更好。奋斗不止于拼搏和坚持,更在于对未来的期待和追求。不要停下脚步,让自己成为一个充满活力和激情的人!

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

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

相关文章

JSON.parse() 全面用法介绍

JSON 通常用于与服务端交换数据。在接收服务器数据时一般是字符串。我们可以使用 JSON.parse() 方法将数据转换为 JavaScript 对象。 语法 JSON.parse(text[, reviver]) text:必需, 一个有效的 JSON 字符串。 reviver: 可选,一个转换结果的函数&#xf…

SPI协议解析

SPI协议介绍 引言介绍SPI简介物理层协议层通讯的起始和停止信号SPI 模式 优缺点优点缺点 使用例程基于STM32的SPI通信准备硬件连接 软件实现 总结 引言 SPI是串行外设接口的缩写,是一种高速的,全双工,同步的通信总线。由于SPI高速和同步的特…

vite环境变量与模式

环境变量 Vite 在一个特殊的 import.meta.env 对象上暴露环境变量。这里有一些在所有情况下都可以使用的内建变量: import.meta.env.MODE: {string} 应用运行的模式。 import.meta.env.BASE_URL: {string} 部署应用时的基本 URL。他由base 配置项决定。 import.m…

【ESP8266】使用MQTT协议 连接华为云iotDA,实现设备属性上报

相关资料:https://github.com/CQUPTLei/ESP8266 往期文章:【ESP8266】基础AT指令和常用WIF指令 【MQTT 5.0】协议 ——发布订阅模式、Qos、keepalive、连接认证、消息结构 一、华为云iotDA1.1 什么是iotDA1.2 创建 iotDA 产品 二、使用ESP8266上报设备…

【杂谈理解】STM32F10X标准库工程模板

前言 基于STM官网的STM32F10x标准外设库V3.6.0版本,文件的操作流程是参考江科大的。记录下此文方便学习和回忆。文章后也会放置完整的工程文件和意法官网下载STM32F10x标准外设库的压缩包。 流程 到意法官网下载STM32F10x标准外设库的压缩包。先找到压缩包的地址&a…

CMake详解

file文件操作 cmake的file命令_cmake file_物随心转的博客-CSDN博客 set指令 CMake中的set指令详解_cmake set_guanguanboy的博客-CSDN博客 include_directories指令 Cmake命令之include_directories介绍 - 简书 add_subdirectory Cmake命令之add_subdirectory介绍 - 简书…

两台电脑用网线传输文件的一些问题解决

两台电脑用网线传输文件 步骤如下: 一、两台电脑插上网线 网线568A和568B可能没什么影响 二、 ipv4地址配置 两个网线插上电脑会自动生成一个ipv4地址 cmd里使用ipconfig查看 用这个就行了如果不想用自动生成的ip地址 也可以自己配置ipv4地址和网关&#xff08…

升级Nginx

目录 前言 一、升级Nginx 1)首先在官网下载一个新版本的Nginx 2)首先将下载的压缩包进行解包 3)进入已解包的目录中 4)配置安装路径 5)make 6)备份原来Nginx的资源 7)重启Nginx服务 8&#…

面向对象程序设计|运算符重载

题目一:分数的加减乘除(运算符重载) 题目描述: Fraction类的基本形式如下: 要求如下: 1.实现Fraction类;common_divisor()和contracted()函数体可为空,不实现具体功能。 2.编写m…

Qt QPainterPath

作用 为painter设置好绘画路径 成员函数 painter.drawPath() 1,使用当前笔画轮廓; 2,填充path指定的路径绘画出来的图形。 xxx.to() lineTo() moveTo() 使用path作画,一定要先将path的启动移动到需要开始绘画的点,否则默认从 (0&…

【大数据之Hive】十三、Hive-HQL函数之单行函数和高级聚合函数

Hive内置函数:单行函数、聚合函数、炸裂函数、窗口函数。 --查看系统内置函数: show functions;--查看内置函数用法: desc function 函数名;--查看内置函数详细信息: desc function extended 函数名;一、单行函数 单行…

GDB调试大全

嵌入式开发必备工具!!!学就完事了!!! 目录 GDB初使用 准备条件:Makefile,section1.cpp 初步使用命令 启动调试 启动调试别传入参数 附加到进程 逐过程执行 逐语句执行 退出函…

apm装机教程(二):四旋翼

文章目录 前言一、接线二、刷固件三、设置机架四、校准遥控器五、设置遥控开关六、校准传感器七、设置参数 前言 硬件: pix2.4.8 250穿越机 云卓T10遥控 软件: APM4.3.7 QGC MP 一、接线 GPS接gps和i2c口,接收机的p/s口接飞控RCIN 二、刷…

SAP从入门到放弃系列之BOM行项目类别-R类别-Part3

文章目录 一、BOM行项目类别设置二、BOM主数据维护三、参数详解3.1、尺寸大小3.2、尺寸大小单位3.3、公式3.4、所需数量3.5、可变尺寸数量3.6、可变尺寸数量单位 四、测试示例演示:小结 一、BOM行项目类别设置 创建或者更改BOM时,BOM行项目类别选择R&am…

SSM超市库存商品管理系统+jsp【附万字文档(Lun文)】

主要功能 管理员权限登录: ①主页、个人中心:修改密码、个人信息 ②员工管理:可以根据员工姓名、手机号、身份证查询,以及增删改查操作 ③会员管理:可以根据会员姓名、手机号、身份证查询,以及增删改查操作…

【进阶]Java:线程通信(了解)

什么是线程通信? 当多个线程共同操作共享的资源时,线程间通过某种方式互相告知自己的状态,以相互协调,并避免无效的资源争夺。 线程通信的常见模型(生产者与消费者模型) 生产者线程负责生产数据消费者线…

IDE/VS2017社区版安装+Qt部署+旧项目迁移

文章目录 概述安装包获取卸载旧版本安装过程首次使用Qt插件配置和使用插件配置Qt项目创建向导 VS2015项目迁移到VS2017 概述 这几天想开始使用glog这个开源日志库,发现其已经在很大程度上使用C14标准了,而VS2015并不能完全支持该标准。根据一些教程试图…

Java的Set接口及其实现类(面试题)

Set接口中没有额外定义新的方法,使用的都是Collection接口中声明过的方法。 * 1. Set接口的框架:** |----Collection接口:单列集合,用来存储一个一个的对象* |----Set接口:存储无序的、不可重复的数据 --&g…

【Spring】— 应用案例——基于注解的Spring MVC应用

目录 应用案例——基于注解的Spring MVC应用1.搭建项目环境2.修改配置文件3.修改Controller类4.启动项目,测试应用 应用案例——基于注解的Spring MVC应用 为了帮助读者熟悉掌握Spring MVC的核心类和注解的使用,接下来将以注解的方式对入门案例进行改写…

CPU多核一定比单核性能强吗

在一般人的眼中,多核性能肯定比单核强,处理器核心越多越好,但果真如此吗? 许多人认为CPU 内核越多越好。然而,情况并非总是如此。这就是为什么更多内核并非在所有情况下都是好的选择,这不仅仅是因为在芯片…