性能测试分析和调优
- 步骤
性能调优的步骤
性能调优的步骤:
1.确定问题:根据性能测试的结果来分析确定bug。–测试人员职责
2.分析原因:分析问题产生的原因。----开发人员职责
3.给出解决方案:可以是修改软件配置、增加硬件资源配置、修改代码等-----开发人员职责
4.验证问题:按照给出的解决方案,重新进行测试—测试人员职责
5.分析验证结果—既要保证有问题指标得到解决,又要保证其他指标没有新问题
注意:
- 性能分析和调优需要经过很多轮,才能得到最终解决。
- 性能问题产生的原因分析:
在实际的性能测试中,会遇到各种各样的问题,比如TPS压不上去,导致这种现象的原因很多,作为测试人员应配合开发人员进行分析尽快找出瓶颈的所在。
性能问题可以产生的原因:
- 硬件服务器资源指标:
硬件服务器资源指标
- 1、服务器的硬件
CPU、内存、磁盘、外设(键盘、鼠标、显示器、散热器、机箱)
运行速度从快到慢:CPU>>内存>>磁盘
存储空间从大到小:磁盘>>内存>>CPU
- 2、CPU时间的介绍
CPU:单位HZ
将CPU划分为若干个时间片,为
每个程序分配对应的时间片,保证所有的程序占用时间片来串行执行。CPU使用率:表示一段时间内,
正在使用的CPU时间段/总的CPU时间段*100%
- 已使用的时间片=用户CPU+系统CPU
- 总时间片=用户CPU+系统CPU+空闲CPU
- 用户CPU:所有应用程序运行时消耗的CPU
- 系统CPU:操作系统运行消耗的CPU
CPU使用率分为用户态、系统态和空闲态
- 用户态:表示cpu处于应用程序执行的时间
- 系统态:表示系统内核执行的时间
- 空闲态:表示空闲系统进程执行的时间
查看CPU使用率的命令:top
测试关注点:
- 当CPU使用率高时,确定是用户CPU高,还是系统CPU高
- 如果是用户CPU高,说明
某个软件程序的CPU资源占用率高,需要定位代码程序运行的效率- 如果是系统CPU高,同步观察是否是其他资源(磁盘IO、内存、网络等)不足
- 内存和虚拟内存
内存和虚拟内存
内存:又称主存储器/物理内存,计算机中所有程序的运行都在内存中进行
虚拟内存:是计算机系统内存管理的一种技术,当计算器内存不足时,可以使用虚拟内存进行补偿。
- 在程序运行时,可以将程序的一部分装入内存,而将其余部分留在外存(磁盘),就可以启动程序来执行。
- 在程序执行过程中,当所访问的信息不在内存时,由操作系统将所需要的部分调入内存,然后继续执行程序。
- 同时,操作系统将内存中暂时不使用的内容换出到外存上,从而腾出空间存放将要调入内存的信息
- 这样,系统好像为用户提供了一个比实际内存大得多的存储器,称为
虚拟内存。命令:
- 查看总量:top
- 查看虚拟内存的使用量:vmstat
测试关注点:
- 实际内存:查看内存使用百分比,检查是否超过80%
- 虚拟内存:查看swap的si和so是否为0,如果
不为0,说明内存可能不足。
- 磁盘IO
磁盘IO
磁盘IO瓶颈:影响性能的时磁盘的读写速度(Input和Output速率),不是磁盘大小。
查看磁盘IO使用的命令:iostat -x 1 1
第一个1表示1s取一次数据,第二个1表示取1次数据
- %iowait:CPU等待输入输出完成时间的百分比
- %util:表示一秒钟有百分之多少的时间用于I/O
测试关注点:
- 如果
%iowait高,说明磁盘IO传输数据的任务很多,在等待,说明磁盘传输速度不足,存在瓶颈- 如果
%util高,说明磁盘长时间占用CPU在发送数据,说明磁盘传输速度不足,存在瓶颈。
- 网络
网络
网络瓶颈:影响性能的是网络的传输速度,与网络的总带宽进行对比,接近总带宽,说明网络存在瓶颈。
查看网络使用的命令:sar -n DEV 1 2
rxkB/s:每秒接收的数据量(千字)
txkB/s:每秒发送的数据量(千字)
测试关注点:
实际统计的发送速率和接收速率,与网络的总带宽进行对比,查看使用的百分比(如果无限接近100%,说明存在网络性能瓶颈)
补充介绍:
宽带:用户(业务)维度来描述网络速率的方式。例如20M宽带、100M宽带、1000M宽带 速率单位:b(bit)/s带宽:数据在网络中传输的速率,在技术中都是通过带宽来描述速率。 速率单位:B(Byte)/s 1B = 8bit- 实际情况:1000M宽带——对应着的宽带速率为1000/8=125M
- 数据库监控
数据库监控
数据库瓶颈分析——慢查询
1、慢查询:
慢查询
概念:找出查询速度慢的sql语句
- 慢:查询时间超过设置的阈值
慢查询的相关参数:
slow_query_long:慢查询开关
slow_query_long_file:慢查询日志存放位置
slow_query_time:慢查询时间阈值
修改完重新新建查询查询慢查询的相关参数:
show avriables like “”设置慢查询的相关参数:
set global 参数名=值设置完成,并运行脚本抓取到慢查询的日志信息为:
测试关注点:
- 基于当前记录下来的慢查询sql进行进一步的分析,判断是否存在问题,需要修改。
2、数据库连接池
数据库连接池
数据库连接池:事先建立好连接,当程序请求sql执行时,直接分配空闲连接,使用完成后释放连接。节省了SQL语句执行前后连接的建立和关闭的时间。
作用:可以提高对数据库操作的性能
工作原理:
查看方法:
- 最大连接数:
show variable like “max_connections”- 当前使用的连接数:
show status like “threads_connected”
测试关注点:
- 关注:利用率=当前使用的连接数/最大连接数,建议:85%左右 ;
- 如果利用率超过85%,连接池可能会被占满
- 如果利用率过低,说明资源存在浪费,可能会影响其他性能指标。
3、mysql锁
数据库死锁
数据库瓶颈分析——数据库死锁
锁的介绍:
- 一个用户修改数据时,对该数据进行加锁操作,其他用户不能进行修改。
- 只有当第一个用户修改完成后,其他用户才能修改
MySQL主要有两种锁:
表级、行级。
- 表级锁:开销小,加锁快;
不会出现死锁,锁定粒度最大,并发度最低。- 行级锁:开销大,加锁慢;
会出现死锁,锁定粒度最小,并发度也最高。死锁:
- 两个进程同时使用资源时,出现的相互争抢的现象
- 死锁后需要等待很长的时间,要么有程序校验机制来释放,要么手动释放。
数据库中锁的介绍:
测试关注点:
show open tables where in_user>=1:查看当前正在使用的表(可能是锁定的表)show pricesslist:查看执行时间长的线程,找到对应的sql
- Java应用瓶颈分析—JVM内存
JVM内存
JVM(JAVA Virtual Machine)JAVA虚拟机管理JAVA程序运行时,所管理的内存
- 堆内存:存储
动态数据,创建对象时申请的空间。给程序员使用- 非堆内存:存储
静态数据。共JVM运行使用。
- JAVA应用:
JVM监控—Jvisualcm.exe
@TOC
1、在java程序启动时,添加启动参数
2、进入jdk的bin目录下,选择“exeisualvm.exe”
3、点击远程,右键选择“添加远程主机”,并设置服务器IP
4、点击主机IP,右键点击“添加JMX连接”,并设置JVM监控的端口
5、点击IP+Port,右边选择“监视”,可以查看JVM内存的实际使用情况
- 压测机:
压测机
压测机影响性能测试结果的原因主要是:
- Jmeter单机负载能力有限,如果需要模拟的用户请求数超过其负载极限,也会导致TPS压不上去
监控的方法:
- windows压测机——
任务管理器- linux压测机——
PerFMon 或者top命令解决方法:
- 添加资源 添加
多台压测机,进行分布式测试
- 性能测试报告
性能测试报告

- 性能调优案例
性能调优案例
案例1——获取首页数据(CPU高)
场景描述:进入首页后,加载首页的相关数据,包括:轮播图、频道、优惠券、团购专区品牌商直供、新品首发、热卖商品、专题精选等数据。
测试结果数据:
分析过程:
- 每发送一个HTTP请求,需要查询27个SQL语句,当TPS为100时,每秒要处理2700个SQL语句
解决方案:
- 增加CPU
- 通过分批次、异步加载的方式,第一次进入首页时只加载第一屏的内容,下拉时再加载后续的数据
案例2——查看商品详情(网络)
- 场景描述:
进入商品详情页面时,加载商品的详细信息- 测试结果数据:
- 原因:
已使用的网络带宽已接近于总带宽- 解决方案:
- 增加网络带宽
- 减少进入商品详情页时的数据请求量
案例3——搜索商品(慢查询)
场景描述:
进入首页,在搜索框中输入关键字搜索商品测试结果数据:
- 搜索关键字“床”时,出现慢查询SQL语句
- 查看慢查询语句cat/var/lib/mysql/localhost-slow.log,包含如下SQL语句:
分析步骤:
- 当搜索关键字匹配到大量的商品时,第3条SQL语句会返回大量重复数据
- 第4条SQL语句中的in查询条件中同样包含大量重复的商品分类id
- 因此:第4条SQL会出现查询时间较长,是由于第3条SQL返回的ID有大量重复
本案例解决方案:
案例4——JVM内存溢出
- 场景描述:
请求测试接口(wx/index/oom),模拟内存溢出- 测试结果数据:
- 解决方案:
开发定位出泄露的点,修改代码。
相关文章:
性能测试分析和调优
步骤 性能调优的步骤 性能调优的步骤: 1.确定问题:根据性能测试的结果来分析确定bug。–测试人员职责 2.分析原因:分析问题产生的原因。----开发人员职责 3.给出解决方案:可以是修改软件配置、增加硬件资源配置、修改代码等----…...
阿里云oss文件上传springboot若依java
一、第一步 引入依赖 <!-- 阿里云OSS --> <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId> </dependency> 二、第二步 application.yml #阿里云oss服务配置 aliyun:oss:endpoint: …...
【自学笔记】Oracle基础知识点总览-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Oracle 数据库基础知识点总览1. 数据库安装与配置2. SQL基础3. PL/SQL基础4. 数据库管理5. 高级主题 总结 Oracle 数据库基础知识点总览 1. 数据库安装与配置 安装…...
使用create_sql_query_chain工具根据自然语言问题生成SQL查询,踩坑版
1. 开启调试模式 from langchain import debugdebug True # 启用调试模式说明: 这里从 langchain 库中导入了一个名为 debug 的变量(或模块),然后将它设置为 True。这通常用来启用调试模式,方便开发者在程序运行时看…...
PyInstaller 打包python 程序 成 可执行文件
pyinstaller --onefile --name my_project --add-data "config/config.json:config" main.py 要将整个 Python 项目打包成一个可执行文件,可以使用 PyInstaller 来完成这个任务。以下是如何将整个项目打包成可执行文件的步骤: 1. 安装 PyIns…...
生鲜行业智能化供应链解决方案技术白皮书
行业痛点与技术挑战 损耗控制难题 行业平均损耗率达18%-25%,需构建动态定价模型与智能分拣系统 冷链管理复杂度 全程温控数据采集点超过23个/车次,异常响应延迟需压缩至90秒内 供需预测偏差 传统模式预测准确率不足65%,亟需AI驱动需求预测体…...
preg_replace 与 str_replace 的比较与选择
preg_replace 与 str_replace 的比较与选择 ——PHP字符串处理的核心工具深度解析 一、核心功能定位 在PHP的字符串处理中,str_replace和preg_replace是两种最常用的替换函数,但其设计目标和应用场景存在本质差异: str_replace 简单字符串替…...
无人机自主导航与避障技术!
自主导航的实现 环境感知:通过传感器(如摄像头、激光雷达、超声波传感器等)获取周围环境信息。 地图构建:利用SLAM(同步定位与地图构建)技术,实时生成环境地图并确定无人机的位置。 路径规划…...
密码学(哈希函数)
4.1 Hash函数与数据完整性 数据完整性: 检测传输消息(加密或未加密)的修改。 密码学Hash函数: 构建某些数据的简短“指纹”;如果数据被篡改,则该指纹(以高概率)不再有效。Hash函数…...
深入探索 STM32 微控制器:从基础到实践
一、引言 在当今的嵌入式系统领域,STM32 系列微控制器凭借其高性能、低功耗、丰富的外设以及广泛的应用场景,成为了众多开发者的首选。无论是在工业控制、智能家居、医疗设备,还是在消费电子等领域,STM32 都展现出了强大的生命力…...
React 常见面试题及答案
记录面试过程 常见问题,如有错误,欢迎批评指正 1. 什么是虚拟DOM?为什么它提高了性能? 虚拟DOM是React创建的一个轻量级JavaScript对象,表示真实DOM的结构。当状态变化时,React会生成新的虚拟DOM…...
SpringSecurity 实现token 认证
配置类 Configuration EnableWebSecurity EnableGlobalMethodSecurity(prePostEnabledtrue) public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { Bean Override public AuthenticationManager authenticationManagerBean() throws Exception {return s…...
【详解 | 辨析】“单跳多跳,单天线多天线,单信道多信道” 之间的对比
文章目录 1. 单跳 & 多跳2. 单天线 & 多天线3. 单信道 & 多信道4. 小区内通信 & 小区间通信5. 更多辨析5.1 无线Mesh网络,Ad Hoc网络,无线传感器网络(MSN)5.2 “单天线/多天线”与“单信道/多信道”的区别 6. 工业…...
嵌入式开发工程师笔试面试指南-HR面试常见问题汇总
在嵌入式领域的招聘面试中,HR 通过一系列精心设计的问题,全面考察候选人的综合素质、专业能力以及与岗位的匹配度。以下从多个关键方面汇总了 HR 在嵌入式面试中常见的问题。 ** 一、语言表达方面 请简单介绍一下你自己这是面试开场常见问题,旨在让候选人做一个自我展示,…...
Docker 搭建 Gitlab 服务器 (完整详细版)
参考 Docker 搭建 Gitlab 服务器 (完整详细版)_docker gitlab-CSDN博客 Docker 安装 (完整详细版)_docker安装-CSDN博客 Docker 日常命令大全(完整详细版)_docker命令-CSDN博客 1、Gitlab镜像 # 查找Gitlab镜像 docker search gitlab # 拉取Gitlab镜像 docker pull gitlab/g…...
MongoDB安全管理
MongoDB如何鉴权 保证数据的安全性是数据库的重大职责之一。与大多数数据库一样,MongoDB内部提供了一套完整的权限防护机制。如下例所示: mongo --host 127.0.0.1 --port 27017 --username someone --password errorpass --authenticationDatabasestor…...
架构案例:从初创互联网公司到分布式存储与反应式编程框架的架构设计
文章目录 引言一、初创互联网公司架构演化案例1. 万级日订单级别架构2. 十万级日订单级别架构3. 百万级日订单级别架构 二、分布式存储系统 Doris 架构案例三、反应式编程框架架构案例总结 引言 分布式架构 今天我们将探讨三种不同类型的架构案例,分别探讨 一个初…...
神经网络之CNN图像识别(torch api 调用)
1.简介 CNN 是受生物学上感受野机制启发而提出的。它通过卷积操作自动提取数据中的特征,避免了传统机器学习方法中复杂的特征工程过程,能够自动学习到数据中的有效特征,从而进行分类、识别等任务。 2.结构 2.1卷积: 假设你有一…...
使用Truffle、Ganache、MetaMask、Vue+Web3完成的一个简单区块链项目
文章目录 概要初始化Truffle项目创建编写合约编译合约配置Ganache修改truffle-config.js文件编写迁移文件部署合约使用Truffle 控制台使用MetaMask和VueWeb3与链交互 概要 使用Truffle、Ganache、MetaMask、VueWeb3完成的一个简单区块链项目。 初始化Truffle项目 安装好truf…...
学生管理前端
文章目录 首页student.html查询功能 首页 SpringBoot前端html页面放在static文件夹下:/src/main/resources/static 默认首页为index.html,我们可以用两个超链接或者两个button跳转到对应的页面。这里只是单纯的跳转页面,不需要提交表单等其…...
DeepSeek 助力 Vue3 开发:打造丝滑的网格布局(Grid Layout)
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
lvgl运行机制分析
lv_timer_handler() 是 LVGL 的“心脏”:这个函数会依次做以下事情: 处理定时器(如动画、延迟回调)。 读取输入设备(如触摸屏、按键的状态)。 刷新脏区域(仅重绘屏幕上发生变化的区域…...
ffmpeg avformat_open_input的作用
1. avformat_open_input 的作用 avformat_open_input 是 FFmpeg 中用于打开输入文件或输入设备的函数。它的主要作用是初始化输入文件或设备的上下文(AVFormatContext),并准备好从输入源读取数据。 2. avformat_open_input 的功能 打开输入文…...
leaflet扩展插件esri-leaflet.js
esri-leaflet.js是一个开源的JavaScript库,它允许开发者在Leaflet地图上轻松地使用Esri的服务,如ArcGIS Online和ArcGIS Server的图层。以下是对esri-leaflet.js插件的详细介绍: 一、主要功能 esri-leaflet.js的主要功能是将Esri的地图服务…...
8 SpringBoot进阶(上):AOP(面向切面编程技术)、AOP案例之统一操作日志
文章目录 前言1. AOP基础1.1 AOP概述: 什么是AOP?1.2 AOP快速入门1.3 Spring AOP核心中的相关术语(面试)2. AOP进阶2.1 通知类型2.1.1 @Around:环绕通知,此注解标注的通知方法在目标方法前、后都被执行(通知的代码在业务方法之前和之后都有)2.1.2 @Before:前置通知,此…...
day01_Java基础
文章目录 day01_Java基础一、今日课程内容二、Java语言概述(了解)1、Java语言概述2、为什么要学习Java语言3、Java平台版本说明4、Java特点 三、Java环境搭建(操作)1、JDK和JRE的概述2、JDK的下载和安装3、IDEA的安装4、IDEA的启动…...
cursor 弹出在签出前,请清理仓库工作树 窗口
问题出现的背景:是因为我有两台电脑开发,提交后,另一个电脑的代码是旧的,这个时候我想拉取最新的代码,就会出现如下弹窗,因为这个代码暂存区有记录或者工作区有代码的修改,所以有冲突࿰…...
详解直方图均衡化
直方图均衡化(Histogram Equalization) 是图像处理中一种常用的对比度增强技术,通过调整图像的灰度分布,使得图像的直方图尽可能均匀分布,从而提高图像的对比度和细节表现。以下是直方图均衡化的原理详解: …...
MyBatis-Plus 自动填充功能
MyBatis-Plus(MP) 提供了一个非常强大的功能——自动填充功能。该功能可以在执行插入或更新操作时,自动为某些字段赋值,免去手动设置这些字段的麻烦。常见的应用场景包括 创建时间 和 更新时间 字段的自动填充,帮助开发…...
认知动力学视角下的生命优化系统:多模态机器学习框架的哲学重构
认知动力学视角下的生命优化系统:多模态机器学习框架的哲学重构 一、信息熵与生命系统的耗散结构 在热力学第二定律框架下,生命系统可视为负熵流的耗散结构: d S d i S d e S dS d_iS d_eS dSdiSdeS 其中 d i S d_iS diS为内部熵…...

























