性能缺陷分类:
缺陷类型 | 缺陷描述 |
---|---|
硬件 | 磁盘空间、CPU、IO读写速率、内存 |
网络 | 带宽、网络波动、CDN、延时、丢包 |
应用 | JVM、代码编辑 |
配置 | JDK版本、底层配置、参数配置 |
数据库 | 索引、锁、表空间、慢SQL、数据量 |
中间件 | 超时、线程池、缓存策略、最大连接数、通讯实现方式、负载均衡 |
一、硬件:
磁盘空间:磁盘空间不足导致系统运行变慢,文件、日志等无法“生成存放”导致性能瓶颈
CPU:CPU核心功能是解释计算机指令及处理数据,性能主要体现在其运行程序的速度上,影响速度的指标有:工作频率、cache容量、指令系统及逻辑结构的参数
IO读写速率:即input和output,输入输出,主要考虑数据处理时的读写速度,页交换等情况
内存:所有程序都在内存中运行,其作用是暂时存放CPU中运算的数据,以及外部存储交换的数据,内存不足辉限制程序的处理速度
二、网络:
带宽:高并发情况下,如带宽不足,会导致网络资源竞争、超时情况
网络波动:从网络稳定性来说,即性能测试环境,需要一个稳定的网络环境
CDN:即内容分发服务,有时候不同的CDN策略会影响“用户”感知系统性能感知
延时:延时值越大,对系统性能表现影响越大
丢包:数据在网络上是以数据包的形式传输,如果丢包,则会造成报错或异常的情况
三、应用
1.JVM
堆内存分配:根据系统硬件条件进行合理的堆内存分配。一般来说堆内存分配不要超过系统内存的25%
垃圾回收算法:Java的动态内存的回收机制,是基于不同的几种回收算法来进行的,根据具体情况,选择合适的垃圾回收策略;
ooM:即内存溢出(out of memory),这个是性能中很常见的问题,通常是由于代码问题造成的内存泄露,GC不够彻底,内存被消耗尽引起的
2、代码逻辑
常见的情况有不合理的线程引用和内存分配
四、配置
版本:在性能测试过程中,一定要确保被测系统的版本和实际生产保持一致,否则由于不同的版本带来有些许差异可能会对性能测试带来很大的影响
底层配置:涉及到操作系统、服务器硬件的一些配置不合理,带来的性能瓶颈
参数配置:系统架构设计中,各个不同的参数配置带来的性能瓶颈
五、数据库
索引:索引的存在就像一个标签目录一样,在执行数据库操作时,提供更为快速的执行效率,减少磁盘io操作和执行的数据库系统时间
锁:为了保证事务的原子性和隔离性,有了锁的存在,但有时候是某些原因造成的表锁,也可能是性能瓶颈的表现
表空间:不合理的表空间设计,导致数据库性能问题
慢SQL:慢SQL会导致数据库操作时间变长,增加IO读写以及引起一系列的资源竞争等问题(见SQL优化)
数据量:对一张表来说,1w数据和1000w条数据,对其操作时的性能表现是不同的
六、中间件
超时:设置合理的请求或响应超时时间,是很有必要的
线程池:线程池配置太小,很容易被使用完,太大的话又浪费资源,合理的线程池,建议进行配置测试来确定;
缓存策略:缓存的优点是减少请求响应过程中的传输时间,但有时在高并发情况下,缓存很容易失效而导致缓存穿透,瞬间对服务端带来很大的压力
最大连接数:合理的连接数配置是很重要的,否则连接数太多容易导致队列等待、超时,连接数太少则浪费系统资源
通信实现方式:同步(sync)和异步(Async);
负载均衡策略:现在很多系统都进行了服务集群,随之而来的就是负载均衡策略实现,如果负载均衡不够“均衡”,在大数量的冲击下,容易导致某些服务的异常或者挂起;
转自:https://www.cnblogs.com/imyalost/p/9611566.html