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

资深测试老鸟整理,性能测试-常见调优详细,卷起来...

目录:导读

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


前言

常见的一些性能缺陷表现及如何进行定位分析并且调优。

注意事项

1、断言
在压测时,为了判断发送的请求是否成功,一般会通过对请求添加断言来实现。使用断言时,建议遵循如下规范:

①断言内容尽量以status/code、msg/message来判断(当然前提是接口设计遵循Restful规范)

Jmeter示例:

11

阿里云PTS:

如果使用的是PTS压测,则断言设置中,以code/status、msg/message等于对应的值为准;

②尽可能不要将所有的Response Body内容作为断言判断的内容,这样很可能会导致大量的“断言”失败;

PS:然后很遗憾的是,见过很多做压测的童鞋,断言内容以整个响应参数内容做断言,导致大量的报错。

2、成功率
一般在性能测试中,我们都追求99.99%的成功率,但在实际的测试过程中,为了尽可能覆盖代码逻辑,在准备阶段会尽可能的准备较多的热点数据去做到覆盖。

这样的话,我们所关注的成功率指标,就要分为如下两种:

①事务成功率
事务成功率在某些时候也可以视为请求成功率,在断言判断时以code/status等内容来作为请求是否成功的衡量依据;

②业务成功率
实际的业务场景中,所谓的成功率,并不能仅根据返回的code/status来判断。比如:一个查询请求,无论是返回正确的查询结果还是由于对应数据返回空,这个请求都是成功的。

对应的响应参数可能是: {“status”:“200”,“message”:“success”} ;也可能是: {“status”:“200”,“message”:“暂无对应结果”} 。

PS:在性能测试过程中,考虑到业务成功率和请求成功率的不同指标,结合断言内容,需要灵活设置断言的方式(当然,我依然建议遵循如上的2点断言规范)

常见性能瓶颈解析及调优方案

在性能测试中,导致性能出现瓶颈的原因很多,但通过直观的监控图表现出来的样子,根据出现的频次,大概有如下几种:

性能瓶颈出现频次具体表现
TPS波动较大
高并发下大量报错
集群类系统,各服务节点负载不均衡
并发数不断增加,TPS上不去,CPU耗用不高
压测过程中TPS不断下降,CPU使用率不断降低
下面对常见的几种性能瓶颈原因进行解析,并说说常见的一些调优方案:

1、TPS波动较大
原因解析:出现TPS波动较大问题的原因一般有网络波动、其他服务资源竞争以及垃圾回收问题这三种。

性能测试环境一般都是在内网或者压测机和服务在同一网段,可通过监控网络的出入流量来排查;

其他服务资源竞争也可能造成这一问题,可以通过Top命令或服务梳理方式来排查在压测时是否有其他服务运行导致资源竞争;

垃圾回收问题相对来说是最常见的导致TPS波动的一种原因,可以通过GC监控命令来排查,命令如下:

 # 实时打印到屏幕
jstat -gc PID 300 10
jstat -gcutil PID 300 10# GC信息输出到文件
jstat -gc PID 1000 120 >>/path/gc.txt
jstat -gcutil PID 1000 120 >>/path/gc.txt

调优方案:
网络波动问题,可以让运维同事协助解决(比如切换网段或选择内网压测),或者等到网络较为稳定时候进行压测验证;

资源竞争问题:通过命令监控和服务梳理,找出压测时正在运行的其他服务,通过沟通协调停止该服务(或者换个没资源竞争的服务节点重新压测也可以);

垃圾回收问题:通过GC文件分析,如果发现有频繁的FGC,可以通过修改JVM的堆内存参数Xmx,然后再次压测验证(Xmx最大值不要超过服务节点内存的50%!)

2、高并发下大量报错
原因解析:出现该类问题,常见的原因有短连接导致的端口被完全占用以及线程池最大线程数配置较小及超时时间较短导致。

调优方案:
短连接问题:修改服务节点的tcp_tw_reuse参数为1,释放TIME_WAIT scoket用于新的连接;

线程池问题:修改服务节点中容器的server.xml文件中的配置参数,主要修改如下几个参数:

# 最大线程数,即服务端可以同时响应处理的最大请求数
maxThreads="200"                        
# Tomcat的最大连接线程数,即超过设定的阈值,Tomcat会关闭不再需要的socket线程       
maxSpareThreads="200"               
# 所有可用线程耗尽时,可放在请求等待队列中的请求数,超过该阈值的请求将不予处理,返回Connection refused错误
acceptCount="200"                 
# 等待超时的阈值,单位为毫秒,设置为0时表示永不超时
connectionTimeout="20000"# 最大线程数,即服务端可以同时响应处理的最大请求数
maxThreads="200"                        
# Tomcat的最大连接线程数,即超过设定的阈值,Tomcat会关闭不再需要的socket线程       
maxSpareThreads="200"               
# 所有可用线程耗尽时,可放在请求等待队列中的请求数,超过该阈值的请求将不予处理,返回Connection refused错误
acceptCount="200"                 
# 等待超时的阈值,单位为毫秒,设置为0时表示永不超时
connectionTimeout="20000"         

3、集群类系统,各服务节点负载不均衡
原因解析:出现这类问题的原因一般是SLB服务设置了会话保持,会导致请求只分发到其中一个节点。

调优方案:如果确认是如上原因,可通过修改SLB服务(F5/HA/Nginx)的会话保持参数为None,然后再次压测验证;

4、并发数不断增加,TPS上不去,CPU使用率较低
原因解析:出现该类问题,常见的原因有:SQL没有创建索引/SQL语句筛选条件不明确、代码中设有同步锁,高并发时出现锁等待;

调优方案:
SQL问题:没有索引就创建索引,SQL语句筛选条件不明确就优化SQL和业务逻辑;

同步锁问题:是否去掉同步锁,有时候不仅仅是技术问题,还涉及到业务逻辑的各种判断,是否去掉同步锁,建议和开发产品同事沟通确认;

5、压测过程中TPS不断下降,CPU使用率不断降低
原因解析:一般来说,出现这种问题的原因是因为线程block导致,当然不排除其他可能;

调优方案:如果是线程阻塞问题,修改线程策略,然后重新验证即可;

除了上述的5种常见性能瓶颈,还有其他,比如:connection reset、服务重启、timeout等,当然,分析定位后,你会发现,我们常见的性能瓶颈,

导致其的原因大多都是因为参数配置、服务策略、阻塞及各种锁导致的。

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

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

在逆境中汲取力量,在困难中锤炼意志,努力奋斗,方能超越自我。不管前路多坎坷,坚持追逐梦想,用汗水浇灌希望,在青春的岁月里绽放绚丽,谱写生命的壮丽乐章。

坚持的力量塑造辉煌,奋斗的精神谱写传奇。扬起梦想的风帆,冲破人生的浪潮。挫折只是暂时的迷茫,努力则是前行的动力。奋斗不止于口号,而是用行动书写自己的传世之篇,创造无限可能的精彩人生。

勇往直前,不畏困难,追逐内心的梦想和热爱。用坚持与努力书写人生华章,每一次奋斗都是收获的种子。不止步于平凡,踏上征程,闯出自己的天空,让奋斗之光点亮未来的道路。

相关文章:

资深测试老鸟整理,性能测试-常见调优详细,卷起来...

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

【第五章 flutter学习之flutter进阶组件-上篇】

文章目录 一、列表组件1.常规列表2.动态列表 二、FridView组件三、Stack层叠组件四、AspectRatio Card CircleAvatar组件五、按钮组件六、Stack组件七、Wrap组件八、StatefulWidget有状态组件总结 一、列表组件 1.常规列表 children: const <Widget>[ListTile(leading: …...

鸿蒙边缘计算网关正式开售

IDO-IPC3528鸿蒙边缘计算网关基于RK3568研发设计&#xff0c;采用22nm先进工艺制程&#xff0c;四核A55 CPU&#xff0c;主频高达2.0GHz&#xff0c;支持高达8GB高速LPDDR4&#xff0c;1T算力NPU&#xff0c;4K H.265/H264硬解码&#xff1b;视频输出接口HDMI2.0&#xff0c;双…...

Bytebase 2.5.0 - VCS 集成支持 Azure DevOps,支持达梦数据库

&#x1f680; 新功能 VCS 集成支持 Azure DevOps。研发版本支持达梦数据库。允许用户设置需要重新登录的频率。支持选择并导出数据库变更历史。新增 MySQL Schema 设计器。支持字段模板库。 &#x1f384; 改进 在 SQL 编辑器中&#xff0c;优化 MongoDB 的查询结果。优化 …...

tomcat通过systemctl启动时报错Cannot find /usr/local/tomcat/bin/setclasspath.sh

解决方法&#xff0c;检查自己的CATALINA_HOME和TOMCAT_HOME配置情况 我的配置在/etc/profile下的如下 使其立即生效 后将/usr/lib/systemd/system/tomcat.service中的CATALINA_HOME和TOMCAT_HOME和/etc/profile改一致 重新加载再重启解决 解决方法&#xff0c;检查自己的C…...

Django架构图

1. Django 简介 基本介绍 Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架 使用 Django&#xff0c;只要很少的代码&#xff0c;Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容&#xff0c;并进一步开发出全功能的 Web 服务 Django 本身…...

vue- 创建wms-web项目

vue 发展历程 安装vite 第一步 创建wms-web项目 第二步 打开文件夹并安装所有开发环境的依赖 都可以放静态资源 public>vite.svg 不会重新编译成其他名字 assets>vue.svg 会重新编译成一个随机的名称 重新编译 启动 第三步 spa 单页渲染 第四步 安装路由 第五步 …...

集成学习:机器学习模型如何“博采众长”

前置概念 偏差 指模型的预测值与真实值之间的差异&#xff0c;它反映了模型的拟合能力。 方差 指模型在不同的训练集上产生的预测结果的差异&#xff0c;它反映了模型的稳定性。 方差和偏差对预测结果所造成的影响 在机器学习中&#xff0c;我们通常希望模型的偏差和方差都…...

排序算法(二)

1.希尔排序-Shell Sort 1.算法原理 将未排序序列按照增量gap的不同分割为若干个子序列&#xff0c;然后分别进行插入排序&#xff0c;得到若干组排好序的序列&#xff1b; 缩小增量gap&#xff0c;并对分割为的子序列进行插入排序&#xff1b;最后一次的gap1&#xff0c;即整个…...

CVPR 2023 | 无监督深度概率方法在部分点云配准中的应用

注1:本文系“计算机视觉/三维重建论文速递”系列之一,致力于简洁清晰完整地介绍、解读计算机视觉,特别是三维重建领域最新的顶会/顶刊论文(包括但不限于 Nature/Science及其子刊; CVPR, ICCV, ECCV, NeurIPS, ICLR, ICML, TPAMI, IJCV 等)。本次介绍的论文是:2023年,CVPR,…...

HTTP隧道识别与防御:机器学习的解决方案

随着互联网的快速发展&#xff0c;HTTP代理爬虫已成为数据采集的重要工具。然而&#xff0c;随之而来的是恶意爬虫对网络安全和数据隐私的威胁。为了更好地保护网络环境和用户数据&#xff0c;我们进行了基于机器学习的HTTP代理爬虫识别与防御的研究。以增强对HTTP代理爬虫的识…...

【MMU】认识 MMU 及内存映射的流程

MMU&#xff08;Memory Manager Unit&#xff09;&#xff0c;是内存管理单元&#xff0c;负责将虚拟地址转换成物理地址。除此之外&#xff0c;MMU 实现了内存保护&#xff0c;进程无法直接访问物理内存&#xff0c;防止内存数据被随意篡改。 目录 一、内存管理体系结构 1、…...

Clion开发Stm32之存储模块(W25Q64)驱动编写

前言 涵盖之前文章: Clion开发STM32之HAL库SPI封装(基础库) W25Q64驱动 头文件 #ifndef F1XX_TEMPLATE_MODULE_W25Q64_H #define F1XX_TEMPLATE_MODULE_W25Q64_H#include "sys_core.h" /* Private typedef ---------------------------------------------------…...

SpringBoot动态切换数据源

SpringBoot整合多数据源&#xff0c;动态添加新数据源并切换 1.需求2.创建数据源配置类3.切换数据源4.切换数据源管理类5.使用案例5.AOP切面拦截 1.需求 低代码服务需要给多套系统进行功能配置&#xff0c;要求表结构必须生成在对应系统的数据库中&#xff0c;所以表结构的生成…...

[C++项目] Boost文档 站内搜索引擎(4): 搜索的相关接口的实现、线程安全的单例index接口、cppjieba分词库的使用、综合调试...

有关Boost文档搜索引擎的项目的前三篇文章, 已经分别介绍分析了: 项目背景: &#x1fae6;[C项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍…文档解析、处理模块parser的实现: &#x1fae6;[C项目] Boost文档 站内搜索引擎(2): 文档文本解析模块…...

SAP ABAP元素域值描述通过函数(DD_DOMVALUE_TEXT_GET)获取

代码如下&#xff1a; PERFORM FRM_GET_DOMVALUE_TEXT USING ZMMD_ZFLZQ <GFS_DATA>-ZFLZQ CHANGING <GFS_DATA>-ZZQTEXT .IF <GFS_DATA>-ZXYLX IS NOT INITIAL .PERFORM FRM_GET_DOMVALUE_TEXT USING ZMMD_ZXYLX <GFS_DATA>-ZXYLX CHANGING <GFS_…...

原型模式与享元模式:提升系统性能的利器

原型模式和享元模式&#xff0c;前者是在创建多个实例时&#xff0c;对创建过程的性能进行调优&#xff1b;后者是用减 少创建实例的方式&#xff0c;来调优系统性能。这么看&#xff0c;你会不会觉得两个模式有点相互矛盾呢&#xff1f; 在有些场景下&#xff0c;我们需要重复…...

uniapp封装手写签名

组件代码 cat-signature <template><view v-if"visibleSync" class"cat-signature" :class"{visible:show}" touchmove.stop.prevent"moveHandle"><view class"mask" tap"close" /><view c…...

掌握 JVM 调优命令

常用命令 1、jps查看当前 java 进程2、jinfo实时查看和调整 JVM 配置参数3、jstat查看虚拟机统计信息4、jstack查看线程堆栈信息5、jmap查看堆内存的快照信息 JVM 日常调优总结起来就是&#xff1a;首先通过 jps 命令查看当前进程&#xff0c;然后根据 pid 通过 jinfo 命令查看…...

扩增子分析流程——Lotus2: 一行命令完成所有分析

为什么介绍lotus2 因为快&#xff0c;作者比较了lotus2流程和qiime2、dada2、vsearch等&#xff0c;lotus2的速度最快、占用内存最小。 因为方便&#xff0c;只需要一行代码&#xff0c;即可完成全部分析。 lotus2 -i Example/ -m Example/miSeqMap.sm.txt -o myTestRun而且分…...

微服务 云原生:搭建 Harbor 私有镜像仓库

Harbor官网 写在文前&#xff1a; 本文中用到机器均为虚拟机 CentOS-7-x86_64-Minimal-2009 镜像。 基础设施要求 虚拟机配置达到最低要求即可&#xff0c;本次系统中使用 docker 24.0.4、docker-compose 1.29.2。docker 及 docker-compose 的安装可以参考上篇文章 微服务 &am…...

Ceph入门到精通-远程开发Windows下使用SSH密钥实现免密登陆Linux服务器

工具&#xff1a; win10、WinSCP 服务器生成ssh密钥&#xff1a; 打开终端&#xff0c;使账号密码登录&#xff0c;输入命令 ssh-keygen -t rsa Winscp下载 Downloading WinSCP-6.1.1-Setup.exe :: WinSCP window 生成密钥 打开powershell ssh-keygen -t rsa 注意路径 …...

APP外包开发的开发语言对比

在开发iOS APP时有两种语言可以选择&#xff0c;Swift&#xff08;Swift Programming Language&#xff09;和 Objective-C&#xff08;Objective-C Programming Language&#xff09;&#xff0c;它们是两种不同的编程语言&#xff0c;都被用于iOS和macOS等苹果平台的软件开发…...

基于Python++PyQt5马尔科夫模型的智能AI即兴作曲—深度学习算法应用(含全部工程源码+测试数据)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境PC环境配置 模块实现1. 钢琴伴奏制作1&#xff09;和弦的实现2&#xff09;和弦级数转为当前调式音阶3&#xff09;根据预置节奏生成伴奏 2. 乐句生成1&#xff09;添加音符2&#xff09;旋律生成3&#xff09;节…...

Android中简单封装Livedata工具类

Android中简单封装Livedata工具类 前言&#xff1a; 之前讲解过livedata和viewmodel的简单使用&#xff0c;也封装过room工具类&#xff0c;本文是对livedata的简单封装和使用&#xff0c;先是封装了一个简单的工具类&#xff0c;然后实现了一个倒计时工具类的封装. 1.LiveD…...

国内大模型在局部能力上已超ChatGPT

中文大模型正在后来居上&#xff0c;也必须后来居上。 数科星球原创 作者丨苑晶 编辑丨大兔 从GPT3.5彻底出圈后&#xff0c;大模型的影响力开始蜚声国际。一段时间内&#xff0c;国内科技公司可谓被ChatGPT按在地上打&#xff0c;毫无还手之力。 彼时&#xff0c;很多企业…...

监控设置ip地址怎么设置

监控设备的IP地址设置是保障监控系统正常工作的基础。通过设置IP地址&#xff0c;我们可以确定监控设备在局域网内的位置&#xff0c;并远程访问监控设备进行实时查看、存储视频等操作。下面虎观代理小二二将介绍具体步骤。 方法一&#xff1a; 和电脑连接在一起&#xff0c;…...

力扣:56. 合并区间(Python3)

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

最小二乘问题和非线性优化

最小二乘问题和非线性优化 0.引言1.最小二乘问题2.迭代下降法3.最速下降法4.牛顿法5.阻尼法6.高斯牛顿(GN)法7.莱文贝格马夸特(LM)法8.鲁棒核函数 0.引言 转载自此处&#xff0c;修正了一点小错误。 1.最小二乘问题 在求解 SLAM 中的最优状态估计问题时&#xff0c;我们一般…...

Selenium/webdriver原理解析

最近在看一些底层的东西。driver翻译过来是驱动&#xff0c;司机的意思。如果将webdriver比做成司机&#xff0c;竟然非常恰当。 我们可以把WebDriver驱动浏览器类比成出租车司机开出租车。在开出租车时有三个角色&#xff1a; 乘客&#xff1a;他/她告诉出租车司机去哪里&…...