1.常见的性能问题
(1)内存泄漏
软件运行的时候没有回收内存,导致系统越来越慢
(2)CPU 使用率达到100%
(3)线程死锁,阻塞,造成系统运行越来越慢
(4)查询速度越来越慢
(5)受外部系统的影响越来越大
2.为什么要进行性能测试
(1)获取系统性能的指标,作为性能基准指标
一个新系统,你不熟悉不知道这个系统的性能指标
(2)验证系统的性能指标是否符合需求
- 应用系统是能够满足系统的各项性能指标
- 应用系统是否可以处理预期的用户数量,并且是否有盈余能力
- 应用系统是否可以处理预期的事务数量
- 在预期和非预期的情况下,系统是否可以稳定的运行
- 在预期或者非预期的情况下,用户使用软件时是否可以获得舒适的体验
(3)看系统是否有内存泄露等瓶颈问题
(4)系统在正常工作下能处理的用户的数量
(5)了解系统的性能,让运维部门更好的规划系统的各种配置
3.确定性能测试的需求(性能指标,量化)
(1)关键性能指标分析
【例1】某电商交易系统,业务要求支持2亿用户(同一时刻1%的用户在线),每天支持2000万次交易量(交易
的时间集中在早上8点到凌晨2点),交易响应时间要求在1s中之内。
此外,高峰期系统的处理能力要求是平均值的3倍;
本地交易响应时间正常低于1s,在高峰时可以高于1s,但是要在3s内。
正常及交易成功率100%,在高峰期不能低于99.9%
这样的业务要求,作为测试人员,如何转化为可以性能测试可以验证的指标呢?
(1)业务支持2亿用户
数据库要支持这个量级的数据存储。同时按1%的用户在线,那么意味着同时有200万用户在线,那系统就要支
持这个数量级用户的各种增删改查操作。
(2)每天支持2000万次交易
根据题意,每天交易的时间在18小时,折算成每秒需要完成多少次交易,即20000000/(18*60*60)=309
次/s。高峰期 927次/秒
......
(2)关键业务的分析
系统出问题,一般不是系统所有的功能出问题,而是一些关键的业务或者功能出了问题导致的
①在分析性能指标的时候,要选择用户频繁使用的功能。
②计算量比较大的业务
4.不同维度衡量系统的性能
(1)研发人员
系统架构是否合理,是否支持多线程并发这类操作
数据库设计是否合理,(合理的索引和合理的关联表关系)
算法,核心算法是否高效
设计和代码:是否存在不合理的线程同步方式和不合理的资源竞争
(2)系统运维人员
系统对资源的利用率,服务器(CPU,内存,磁盘,网络带宽等)的利用率和数据库的使用状况
系统容量:系统支持的最大用户数
系统的稳定性:是否可以稳定运行,一天24小时
系统的可扩容性,如果要进行扩容操作,系统可以支持
(3)用户
使用起来是否舒适,响应速度是否快,稳定性好
(4)性能测试人员
以上的层面都需要关注
当系统性能无法达到时,关注引起系统性能的瓶颈
5.性能指标
(1)并发的用户数
业务层面的并发数:同一时刻向后端服务器发送请求的用户的数量
后端服务器的并发数:同一时刻向后台服务器发送请求的数量
(2)响应时间
指的是用户发送请求,到用户所期待的响应完全展示到前端所需要的时间
前端响应时间
系统响应时间,服务器之间通信处理请求所需要的时间
(3)事务的响应时间
事务:指的是一系列密切相关的操作的集合
系统中完成一个事务的平均响应时间
(4)每秒事务通过数
TPS(Transaction Per Second)
平均每秒处理的事务的数量
(5)点击率
每秒点击数代表用户每秒向Web服务器提交的HTTP请求的个数
点击率越大,服务器的压力越大
(6)吞吐量⭐
单位时间系统处理的信息量
TPS ,HPS(HTTP Per Second) bytes/Second
(7)思考时间
模拟用户时间操作的停顿时间
(8)资源利用率
系统运行的时候资源的使用情况,包括 CPU(不超过70%),内存,硬盘,网络
6.模型
当系统性能不满足需求的时候,我们需要扩展系统的性能
7.性能测试方法
(1)基准测试(没有性能要求,主要了解系统的性能)
系统的新版本,或者先接手的系统,需要进行基准测试,获得系统的性能指标,作为以后改善系统性能,或者保持系统性能的基准。
进行基准测试不仅可以获取系统的基准性能指标,也可以能会发现新系统的一些性能问题
(2)并发测试
同一时刻,像后端服务器发送请求,测试系统的表现,看系统是否会因为用户量大而出现资源竞争,死锁等问题。
(3)压力测试
压力测试一般指后端眼里的测试,不断对系统施加压力,看系统在长期处于临界饱和情况下,系统稳定性以及系统性能指标的变化
进行压力测试的时候会不断向系统增加负载,使得系统长期处于高负荷情况,看系统在极限的情况下是否稳定,确定系统在极限情况下的CPU利用率,内存使用情况等其他指标
(4)配置测试
系统配置在不同的配置上进行测试,找出能够使得系统性能发挥最优的配置
操作系统的配置 Linux Ubuntu Redhat
数据服务器的配置 读写,存储容量大
JVM 配置
网络环境
服务器,内存,磁盘等
(5)可靠性测试 (24小时,一周)
验证系统长时间运行的稳定性
系统实际负载的 70% 左右,长时间运行,看系统是否运行稳定,指标是否稳定