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

性能测试常见问题总结

01 硬件上的性能瓶颈

指的是CPU、内存、I/O读写速率,磁盘空间方面的问题。

02 网络上的性能瓶颈

指的网络带宽,网络波动,延时,丢包等。

03 应用程序上的性能瓶颈

指的是开发人员新开发出来的应用程序。

04 数据库的性能瓶颈

指的是数据库索引,锁,表空间,慢sql,数据量等影响。

05 中间件的性能瓶颈
比如:超时设置,线程池设置,缓存策略,最大连接数,负载均衡策略等等。

常 见 问 题

一、容量(压力)测试过程中cpu过高

这个要考虑压了多少用户

结果:cpu却到了80%多,指标是不能超过60%。

解决思路:如果是cpu过高,先把消耗cpu最多的进程找出来(top命令),再找到该线程下消耗cpu过高的是哪几个线程,再把该线程处理掉

二、内存溢出(堆溢出、栈溢出、持久代溢出)

解决思路:1、调整堆内存参数,一般是增加堆内存

2、减少批处理数据量

三、线程死锁:容量(压力)测试压测一段时间后,报连接超时

解决思路:

1、造成这种现象的原因很多,比如带宽不够,中间件线程池不够用,数据库连接池不够,连接数占满等都会造成连接不上而报超时 错误

2、找到死锁的线程,分析对应的代码

四、数据库死锁

解决思路:

1、造成这种现象的原因很多,比如带宽不够,中间件线程池不够用,数据库连接池不够,连接数占满等都会造成连接不上而报超时错误。

2、(重点)数据库日志中搜索block,能搜到block的话就是存在数据库死锁,找到日志,查看对应的sql,优化造成死锁的sql。

五、数据库连接池不释放

去mysql数据库查看应用程序到数据库的连接有多少个。

通过命令:

show variables like ‘%max_connections%’; 查询设置的最大连接数;

show status like 'Threads%'查询当前的连接数是多少

show processlist/show full processlist;

如果当前连接数大于等于最大连接数,说明数据库连接池被占满,需要把最大连接数修改大一点。

通过日志分析或者查看代码,数据库连接部分是不是有创建连接但是没有关闭连接的情况。基本就是这种情况导致的,修改代码即可。

六、压力测试中TPS一直上不去

1、网络带宽

分析思路:

在压力测试中,有时候要模拟大量的用户请求,如果单位时间内传递的数据包过大,超过了带宽的传输能力,那么就会造成网络资源竞争,间接导致服务端接收到的请求数达不到服务端的处理能力上限。

2、连接池

可用的连接数太少,造成请求等待。连接池一般分为服务器连接池(比如Tomcat)和数据库连接池(或者理解为最大允许连接数也行)。

3、数据库配置

高并发情况下,如果请求数据需要写入数据库,且需要写入多个表的时候,如果数据库的最大连接数不够,或者写入数据的SQL没有索引没有绑定变量,抑或没有主从分离、读写分离等,就会导致数据库事务处理过慢,影响到TPS。

4、硬件资源

包括CPU(配置、使用率等)、内存(占用率等)、磁盘(I/O、页交换等)。

5、业务逻辑

业务解耦度较低,较为复杂,整个事务处理线被拉长导致的问题。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

相关文章:

  • 数据库表字段以表格形式写入Word
  • vite+react+typescript 遇到的问题
  • 002 OpenCV dft 傅里叶变换
  • 阿里云服务器 手动搭建WordPress(CentOS 8)
  • 【Java 进阶篇】深入理解 JQuery 事件绑定:标准方式
  • Python小白之PyCharm仍然显示“No module named ‘xlwings‘”
  • 基于单片机的水位检测系统仿真设计
  • Postman+Newman+Jenkins实现接口测试持续集成
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • 【智能家居项目】FreeRTOS版本——多任务系统中使用DHT11 | 获取SNTP服务器时间 | 重新设计功能框架
  • gRPC之SAN证书生成
  • 二百零二、Hive——Hive解析JSON字段(单个字段与json数组)
  • 第六章 图(上)【图的基本概念和存储】
  • IntelliJ IDE 插件开发 |(一)快速入门
  • 使用IDEA 将Eclipse java工程转为maven格式
  • [deviceone开发]-do_Webview的基本示例
  • 0基础学习移动端适配
  • CAP理论的例子讲解
  • Java 23种设计模式 之单例模式 7种实现方式
  • JavaScript创建对象的四种方式
  • Javascript弹出层-初探
  • Java教程_软件开发基础
  • Java-详解HashMap
  • js递归,无限分级树形折叠菜单
  • mysql_config not found
  • spring boot下thymeleaf全局静态变量配置
  • Vue学习第二天
  • 闭包,sync使用细节
  • 微信小程序填坑清单
  • C# - 为值类型重定义相等性
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (C语言)球球大作战
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (ZT)一个美国文科博士的YardLife
  • (初研) Sentence-embedding fine-tune notebook
  • (分布式缓存)Redis哨兵
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (过滤器)Filter和(监听器)listener
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (三)mysql_MYSQL(三)
  • (正则)提取页面里的img标签
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net Core和.Net Standard直观理解
  • .NET Core中的去虚
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET Micro Framework初体验
  • .NET业务框架的构建
  • :O)修改linux硬件时间
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • [@Controller]4 详解@ModelAttribute
  • [20150321]索引空块的问题.txt
  • [383] 赎金信 js