性能测试,是结合被测系统应用架构、业务场景和实现细节、逻辑,对软件响应时间、处理速率、容错能力等进行分析测试,找到系统的性能瓶颈,并确认问题获得解决的过程。html
因为工做须要,对性能测试缺陷分类进行了整理,这篇博客,聊聊常见的性能缺陷以及表现方式。。。算法
性能测试缺陷分类数据库
缺陷类型 | 缺陷描述 |
硬件 | 磁盘空间 |
CPU | |
IO读写速率 | |
内存 | |
网络 | 带宽 |
网络波动 | |
CDN | |
延时 | |
丢包 | |
应用 | JVM |
代码逻辑 | |
配置 | JDK版本 |
底层配置 | |
参数配置 | |
数据库 | 索引 |
锁 | |
表空间 | |
慢SQL | |
数据量 | |
中间件 | 超时 |
线程池 | |
缓存策略 | |
最大链接数 | |
通讯实现方式 | |
负载均衡 |
1、硬件缓存
磁盘空间:磁盘空间不足致使系统运行变慢,文件、日志等没法生成存放致使的性能瓶颈;服务器
CPU:CPU的核心功能是解释计算机指令以及处理数据,性能主要体如今其运行程序的速度上。影响运行速度的性能指标包括工做频率、Cache容量、指令系统和逻辑结构等参数;网络
IO读写速率:即input和output,输入和输出,主要考虑数据处理时的读写速度,页交换等状况;架构
内存:全部的程序都是运行在内存中的,其做用是用于暂时存放CPU中的运算数据,以及与外部存储器交换的数据,内存不足会限制程序的数据处理速度,所以这也是很重要的一项性能关注指标;并发
2、网络负载均衡
带宽:高并发状况下,若是带宽不足,可能会致使网络资源竞争,超时等状况;异步
网络波动:这里是从网络的稳定性来描述,即性能测试的环境,须要一个稳定的网络环境;
CDN:即内容分发服务,有时候不一样的CDN策略也会影响到“用户”感知到的系统性能表现;
延时:延时的值越大,对系统性能表现影响越大(好比格斗类的PVP游戏),且性能测试的结果也存在更大的误差;
丢包:数据在网络上是以数据包的形式传输的,若是丢包,则可能形成报错或异常的状况;
3、应用
一、JVM
堆内存分配:根据系统硬件条件来进行合理的堆内存分配,通常来讲JVM的堆内存分配不要超过系统内存的25%较好;
垃圾回收算法:JAVA的动态垃圾回收机制,是基于不一样的几种回收算法来进行的,根据具体的状况,选择合适的垃圾回收策略;
OOM:即内存溢出(out of memory),这个算是性能测试中很常见的一个问题,一般是因为代码问题形成的内存泄漏、GC不够完全、内存被耗尽引发;
二、代码逻辑
常见的状况有不合理的线程引用和内存分配;
4、配置
版本:在性能测试过程当中,必定要确保被测系统的版本和实际生产保持一致,不然因为版本不一样带来的些许差别可能会对性能测试带来很大的误差和影响;
底层配置:涉及到操做系统、服务器等硬件的一些配置方式不合理,带来的性能瓶颈;
参数配置:系统架构设计中,各个不一样的参数配置带来的性能瓶颈;
5、数据库
索引:索引的存在就像一个标签目录同样,在执行数据库操做时提供更为快速的执行效率,减小磁盘IO操做和执行的数据库系统时间;
锁:为了保证事务的原子性和隔离性,有了锁的存在,但有时候因为某些缘由形成的表锁,也是性能瓶颈的一种表现;
表空间:不合理的表空间设计,致使的数据库性能问题;
慢SQL:慢SQL会致使数据库操做时间变长,增长IO读写以及引发一些列的资源竞争等问题,常见的慢SQL缘由以下(以MySQL为例):
数据量:对同一张表来讲,1W条数据和1000W条数据,对其进行操做时的性能表现也是不一样的,所以在性能测试时对于数据的正确性可用性,以及数据量也是须要重点关注的;
6、中间件
超时:设置合理的请求或响应超时时间,是颇有必要的,这点要根据具体的业务场景和系统架构来考虑,具体的超时时间,建议进行配置测试来设定;
线程池:以前的博客介绍过线程池的相关资料,线程池配置过小,很容易被使用完,太大的话又浪费资源,合理的线程池,建议进行配置测试来肯定;
缓存策略:缓存的优势是减小请求响应过程当中的传输时间,但有时候在高并发状况下,缓存很容易失效而致使缓存穿透,瞬间对服务端带来很大的压力;
最大链接数:关于链接数,以前的博客也介绍过,合理的链接数配置是很重要的,不然链接数太少容易致使队列等待、超时,链接数太多则浪费了系统资源;
通讯实现方式:同步(sync)和异步(Async);
负载均衡策略:如今不少的系统都进行了服务集群,随之而来的就是负载均衡策略的实现,若是负载均衡不够“均衡”,在大数量的冲击下,容易致使某些服务的异常或者挂起;
以上内容为整理出的常见的影响系统应用性能表现的常见缺陷,更详细的内容好比实现原理、处理逻辑等请自行查阅其余资料,内容仅供参考。。。