当前位置: 首页 > news >正文

性能测试相关理解(一)

根据学习全栈测试博主的课程做的笔记

一、说明

若未特别说明,涉及术语都是jmeter来说,线程数,就是jmeter线程组中的线程数

在这里插入图片描述

二、软件性能是什么

1、用户关注:响应时间

2、业务/产品关注:响应时间、支持多少并发数、对业务的处理能力

3、运维关注:响应时间(是否有超时的请求)、资源利用率、稳定性等

4、dba关注:响应时间(慢sql或者死锁),关注数据库的资源利用情况(表空间的资源使用情况)

5、开发关注:响应时间(代码逻辑的处理快慢,特别是锁,锁的力度不合理导致后来的请求响应时间长)

6、架构师关注:架构是否涉及合理(是否具备扩展能力)

7、测试关注(关注6类用户关注的):响应时间、处理能力(TPS)、稳定性、什么时候进行扩展等

三、几个性能测试相关得概念

1、 负载测试:不同客户端线程数下服务器处理的能力

客户端线程数下即就是jmeter下的线程数
模拟客户端向服务器发送压力

2、容量测试:强调的是容量测试、业务(混合容量tps),当前支持的最大容量、对未来容量的规划

数据库容量即就是数据库的数据量

3、递增测试:强调的是递增,连续递增加压,看服务器的处理能力

4、 强度测试:用大量的客户端,并发线程看服务端表现情况

5、性能测试:在某个特点的硬件、软件、网络设计场景模拟并发请求,通过监控分析进行调优,达到性能测试目标

6、总结

前面的四种强调的是不同的性能测试方式,性能测试场景的设计。可以将四种测试设计在里面。负载测试(场景就是阶梯加压,每个阶梯对应的就是客户端的线程数,对应的负载,再测一个最大值。
递增测试:连续阶梯加压。
强调测试:连续阶梯加压,测试最大值。

四、性能测试中的关键术语

1、 并发、线程、tps

1.1公司要求500并发、500并发表示什么?

1.2并发分类、以及线程、tps的关系

1.2.1绝对并发–狭义:表示服务端某一个时刻物理的请求数。处理的请求数和什么有关系?

如某一个服务器是16c,64g,某一个时刻处理多少请求和逻辑cpu有关系,实际测试时服务端做并发。

1.2.2相对并发-广义/tps

某一个时间段内处理的请求数,相对并发才是真正服务器的处理能力。不是站在服务器逻辑cpu的角度。
平时的并发就是相对并发,就是tps。

tps就是每秒钟处理多少个请求,1s是时间段。
为什么并发是tps?
解释:并发=tps,需要站在客户端和服务端的视角下。
上面两个并发仅站在服务端的角度,tps是要站在客户端和服务端的视角下。把并发分为客户端并发和服务端并发。

很多都是认为客户端jmeter处的线程数就是并发数.,其实没啥问题,但是需要认定为客户端并发,而并不是服务端并发。还把并发分为客户端并发和服务端并发。

1.2.3客户端并发

此处的jmeter中的线程数是模拟大量请求对服务端产生压力,此时的数值在性能测试中是没有参考意义的。

此处并不能说明值设计的越大,性能就越好。而是需要看服务器的处理情况(服务器的tps、成功率、响应时间)
一般说的并发说的是服务端的并发。

并发不等于线程数,为什么?
举例:若每秒的线程数为10,每个线程数1s内可以完成10个事务,循环发10次请求。此处完成的请求是100个,看性能需要看服务端而不是客户端,服务端相当于是10个线程,完成了10个事务,循环发了10个事务的请求,服务端都进行了处理。即并发–100,则tps是100。

线程是否是用户 10个线程不等于10个用户(虚拟用户)
领导要求500并发,并不是说jmeter客户线程数设置就是500.jmeter的线程数是可以随意设置的最好的就是连续加压,可以看到每个阶梯的tps使用情况再看监控。

每个线程1s,阶梯加压到50个线程时tps就是500。
前提:tps服务器处理请求随着jmeter线程数增加而线性增加。

压测不仅要压目标tps,还需要压测出最大的tps.
50个线程已经达到500目标tps。假设在200个线程时,线程增加时,最大的目标tps则为2000,继续加压时,tps则下降,这时已经超过服务器的最大处理能力,请求都在排队,响应时间增长。

所以如果一个系统的响应比较快,1个线程1s时间内可以完成10个事务,需要设置的线程数是小于客户端jmeter的线程数。

并发:客户端的并发只是为了模拟用户给服务端加压力,他是没有参考意义的,是需要服务端的并发,服务端的并发是tps

线程是否=用户?(虚拟用户)

线程不等于用户(为什么?
因为线程做了用户的动作,线程的每一次迭代才称为用户)即jmeter处的循环次数,发一次请求服务端给一次响应,这个是迭代。

注册场景:
1s内,1个线程可以发10次请求,注册时用户名需要不一样,此时假设已经参数化并且参数是足够多,1个线程1s可以发10次请求就相当于10个用户进行注册,10个线程就是发100个请求,即就是100个用户进行注册,100个用户用户名不同。并发用户数此时是100,tps100,压力线程数是10.

可以这么理解:
线程只是执行用户的操作,线程的每一次迭代是模拟了用户的操作。

事务(关注流程,整个流程就为请求,若不关注流程,一个请求就是一个事务就是)

在这里插入图片描述

1.2.4服务端并发(站在业务层面,站在服务器的处理能力进行谈并发)

客户端并发只是为了向服务端发送压力,并没有什么参考意义。

服务端并发的:前提是需要保证事务的成功率,具体是多少,看行业要求,涉及到金钱事务的成功率是100%,涉及到其他一般是项目组定(如99.9%)

在这里插入图片描述

1.2.5线程和tps的瞬时计算

线程和tps的瞬时计算,并不是整个的计算

此处表面3个线程,1s可以完成5次请求,3个线程即就是3*5=15,

tps=15=总请求数/并发时间=15/1s=35=3(1000ms/200ms)
总请求数/并发时间=线程数*(1000/rt每个请求的响应时间)
rt是瞬时值

2、QPS和TPS的区别

QPS(Query Per Second):每秒钟的查询
TPS(Transaction per Second)):每秒钟的处理事务数

3、响应时间rt:判断业务快慢的指标

正常的性能压测响应时间都是从低到高
刚开始压力小时,服务器都能进行处理,响应也比较快。随着压力越来越大,处理不过来,请求排队。

3.1rt增加、表示开始出现性能瓶颈

3.2补充瓶颈分析

此处简单介绍,后面详细解释

3.2.1简单架构

对于简单架构,一般是通过服务器的资源情况进行判断是否出现瓶颈。

3.2.2复杂架构(微服务)

对于复杂架构
就需要进行去分解响应时间看什么地方耗时多。

对时间的分解的方式:日志打点计时器,通过日志去查看请求的时间,
对于微服务最后是:链路监控工具(skywalking)

在这里插入图片描述

4、 线程、tps、rt三者的关系

4.1线程、tps、rt三者关系图

jmeter线程数增加,发送的请求增加,刚开始都能处理,随着增加线程逐渐增加,服务器的资源利用率就会增加(cpu、mem),此图,tps随着线程数的增加是线性增加,到了一定阶段后,服务器出现了瓶颈后,响应时间开始增加,tps达到最大值后,tps增幅趋于平稳或者下降

在这里插入图片描述

4.2连续阶梯加压场景设计图(这个是用插件实现的)

图上斜的就是启动线程,启动多少线程
启动后又可以平稳的运行一段时间

在这里插入图片描述

五、性能指标

怎么衡量系统的性能?以下指标

1、tps、rt、成功率

tps是用来衡量服务器的处理能力,而在jmeter中就是压测那段时间内,总的请求数/压测的时间=tps

rt:jmeter中有平均响应时间、90%、95%、99%的响应时间

成功率也有进行统计。

2、也可以加上技术指标:sql耗时不能超过200ms,fgc在多少时间范围内不能超过多少次,服务器资源使用情况

相关文章:

性能测试相关理解(一)

根据学习全栈测试博主的课程做的笔记 一、说明 若未特别说明,涉及术语都是jmeter来说,线程数,就是jmeter线程组中的线程数 二、软件性能是什么 1、用户关注:响应时间 2、业务/产品关注:响应时间、支持多少并发数、…...

缓存-分布式锁-原理和基本使用

分布式锁原理和使用 自旋 public Map<String, List<Catelog2Vo>> getCatalogJsonFromDBWithRedisLock() {Boolean b redisTemplate.opsForValue().setIfAbsent(Lock, Lock, Duration.ofMinutes(1));if (!b) {int i 10;while (i > 0) {Object result redisTe…...

判断国内ip

php代码 //是否国内ip function isChinaIP($ip) {saveLog("---isChinaIP----------");$url "https://searchplugin.csdn.net/api/v1/ip/get?ip".$ip;// 发送HTTP请求$response file_get_contents($url);$utf8String mb_convert_encoding($response, &…...

linux修改内核实现禁止被ping(随手记)

概述 Linux默认允许被ping。其主要决定因素为&#xff1a; 内核参数防火墙&#xff08;iptables/firewall&#xff09; 以上的决定因素是与的关系&#xff0c;即需要均满足。 因此&#xff0c;修改linux禁被ping有以上两种方法可以实现。 修改内核文件使禁ping 1. 临时生…...

mac M1安装 VSCode

最近在学黑马程序员Java最新AI若依框架项目开发&#xff0c;里面前端用的是Visual Studio Code 所以我也就下载安装了一下&#xff0c;系统是M1芯片的&#xff0c;安装过程还是有点坑的写下来大家注意一下 1.在appstore中下载 2.在系统终端中输入 clang 显示如下图 那么在终端输…...

代码随想录算法训练营第二十七天 |56. 合并区间 738.单调递增的数字 968.监控二叉树 (可跳过)

56. 合并区间 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#xff1a;in…...

网络基础:IS-IS协议

IS-IS&#xff08;Intermediate System to Intermediate System&#xff09;是一种链路状态路由协议&#xff0c;最初由 ISO&#xff08;International Organization for Standardization&#xff09;为 CLNS&#xff08;Connectionless Network Service&#xff09;网络设计。…...

Java面试八股之如何提高MySQL的insert性能

如何提高MySQL的insert性能 提高MySQL的INSERT性能可以通过多种策略实现&#xff0c;以下是一些常见的优化技巧&#xff1a; 批量插入&#xff1a; 而不是逐条插入&#xff0c;可以使用单个INSERT语句插入多行数据。例如&#xff1a; INSERT INTO table_name (col1, col2) V…...

【密码学】什么是密码?什么是密码学?

一、密码的定义 根据《中华人民共和国密码法》对密码的定义如下&#xff1a; 密码是指采用特定变换的方法对信息等进行加密保护、安全认证的技术、产品和服务。 二、密码学的定义 密码学是研究编制密码和破译密码的技术科学。由定义可以知道密码学分为两个主要分支&#x…...

k8s record 20240703

1. containerd 它不用于直接和开发人员互动&#xff0c;在这方面不和docker竞争 containerd的用时最短&#xff0c;性能最好。 containerd 是容器的生命周期管理&#xff0c;容器的网络管理等等&#xff0c;真正让容器运行需要runC containerd 是一个独立的容器运行时&am…...

Ansible常用模块

华子目录 Ansible四个命令模块1.组成2.特点3.区别3.1command、shell模块3.2raw模块 4.command模块4.1参数表4.2free_form参数 5.shell模块5.1作用5.2例如 6.script模块6.1示例 7.raw模块7.1参数7.2示例 文件操作模块1.file模块1.1参数1.2示例 2.copy模块2.1参数 Ansible四个命令…...

【JavaScript脚本宇宙】提升用户体验:探索 JavaScript 库中的浏览器特性支持检测

深入探讨JavaScript库&#xff1a;功能、配置与应用场景 前言 在现代的Web开发中&#xff0c;JavaScript库扮演着至关重要的角色&#xff0c;帮助开发人员简化代码、提高效率、实现更好的用户体验。本文将探讨几个常用的JavaScript库&#xff0c;包括模块加载库、数据绑定库和…...

深度学习:C++和Python如何对大图进行小目标检测

最近在医美和工业两条线来回穿梭&#xff0c;甚是疲倦&#xff0c;一会儿搞搞医美的人像美容&#xff0c;一会儿搞搞工业的检测&#xff0c;最近新接的一个项目&#xff0c;关于瑕疵检测的&#xff0c;目标图像也并不是很大吧&#xff0c;需要放大后&#xff0c;才能看见细小的…...

Eureka从入门到精通面试题及答案参考

什么是Eureka?它在微服务架构中扮演什么角色? Eureka是Netflix开源的一款基于REST的服务发现组件,它主要应用于构建分布式系统中的服务注册与发现。在微服务架构中,Eureka扮演着至关重要的角色,它让微服务架构中的各个服务实例能够互相发现、相互调用,从而实现了服务之间…...

io流 多线程

目录 一、io流 1.什么是io流 2.流的方向 i.输入流 ii.输出流 3.操作文件的类型 i.字节流 1.拷贝 ii.字符流 ​3.字符流输出流出数据 4.字节流和字符流的使用场景 5.练习 6.缓冲流 1.字节缓冲流拷贝文件 2.字符缓冲流特有的方法 1.方法 2.总结 7.转换流基本用法…...

人工智能、机器学习、神经网络、深度学习和卷积神经网络的概念和关系

人工智能&#xff08;Artificial Intelligence&#xff0c;缩写为AI&#xff09;--又称为机器智能&#xff0c;是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 人工智能是智能学科重要的组成部分&#xff0c;它企图了解智能的实质…...

对话大模型Prompt是否需要礼貌点?

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 基于Dify的QA数据集构建&#xff08;附代码&#xff09;Qwen-2-7B和GLM-4-9B&#x…...

【驱动篇】龙芯LS2K0300之ADC驱动

实验目的 由于LS2K0300久久派开发板4.19内核还没有现成可用的ADC驱动&#xff0c;但是龙芯官方的5.10内核已经提供了ADC驱动&#xff0c;想要在4.19内核使用ADC就要参考5.10内核移植驱动&#xff0c;本次实验主要是关于ADC驱动的移植和使用 驱动移植 主要的驱动代码主要有3个…...

Python入门 2024/7/3

目录 for循环的基础语法 遍历字符串 练习&#xff1a;数一数有几个a range语句 三个语法 语法1 语法2 语法3 练习&#xff1a;有几个偶数 变量作用域 for循环的嵌套使用 打印九九乘法表 发工资案例 continue和break语句 函数的基础定义语法 函数声明 函数调用 …...

Go 语言 Map(集合)

Go 语言 Map(集合) Map 是 Go 语言中一种非常重要的数据结构,它用于存储键值对。在 Go 中,Map 是一种无序的键值对的集合,其中每个键都是唯一的,而值则可以是任何类型。Map 是 Go 语言的内置类型,使用起来非常方便,同时也是许多 Go 程序中不可或缺的一部分。 Map 的声明…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...