1. 性能测试基本概念
1.1 如何衡量一个接口的性能
- 在<font color#FF0000>4核8G的服务器上压测,<font color#FF0000>20并发下,我们测试得到的<font color#FF0000>TPS为200,MRT为150ms,RT90值为250ms,CPU使用率为65%
- 服务器的配置:CPU、显卡好,能承受的IO一定是高的;网卡大,能承受的流量很大。性能与硬件是有关系的,要把硬件描述出来。
-
衡量性能的指标
- 并发数
- TPS
- MRT、RT90值、RT99值 (RT:Response time)
- 资源使用率(CPU、内存、网络、磁盘)
1.2 吞吐量
- 每秒钟成功处理的事务数/请求数
- 衡量指标
* TPS:Transaction per second 对于接口来说,TPS是最主要的
* IOPS:IO per second
* BPS: Bytes per second
* QPS:Query per second 数据库-每秒查询的事件
1.3 响应时间:
- 从客户端发起一个请求开始,到客户端接收到从服务器端返回的最后一个字节结束,这个过程所耗费的时间
- 响应时间=(N1+N2+N3+N4)+(A1+A2+A3)
如果一个接口响应很慢,通常需要打点,将慢的部分找出来。
响应时间的衡量指标: - MRT(Mean Response Time):平均响应时间
- STD DEV:标准差,响应时间波动,波动越小越好
- RT90:90%请求的响应时间小于该值,产品响应及时要求不同,如网络延迟要求99.99%在某值范围
- MAX:最大值,长尾时间
1.4 资源使用率
- 资源使用率指对不同系统资源的使用程度
* 系统资源:CPU/内存/磁盘IO/网络IO
* 应用资源:队列,锁,现层,GC,连接数等。
* 当接口响应慢,也要考虑硬件的因素
1.5 四个常见的性能测试概念
a点:性能期望值
b点:高于期望,系统资源处于临界点
c点:高于期望,性能处于拐点,系统能承受的最大的TPS值
d点:系统资源出现瓶颈,性能下降
- 性能测试:通常在a点和b点之间进行
- 负载测试:b点到c点
- 压力测试:b点到d点,压倒最高点c,再加大线程,TPS反而下降,得出的c点即为系统能承受的最大的TPS值
- 稳定性测试:a-b,不要超过c(超过c是没有意义的)
2. 如何开展性能测试
2.1 性能测试目标和测试类型的选择
- 上线的功能是否有性能问题?
* 评估系统性能:性能测试、负载测试
* 检查系统性能瓶颈点:负载测试、压力测试 - 优化后的接口,是否有性能提升
* 回归测试、负载、压力测试 - 验证稳定性、可靠性等:稳定性测试、异常测试
- 容量评估:线上压测
2.2 哪些接口需要进行性能测试
- 核心功能
- 高频调用接口(不一定是核心的,但调用量很大)
- 业务逻辑复杂的接口、大量数据库读写操作
2.3 性能测试环境要求
- 软硬件环境要求一致
* 线上集群的最小集合
* 硬件配置最好一致
* 拒绝多个服务混部在同一台服务器上
* 软件配置和线上保持一致
2.4 测试准备
- 测试数据
* 用户账号- 预估三个月或半年后活跃用户数
- 避免随便几十个用户账号就开始测试
* 参数化数据,数据量、数据大小符合真实分布
* 设置[铺底数据](测试库数据量大小和线上保持一致,否则几十条数据测试正常,而放到线上几十万条就引发性能问题),从镜像库导线上数据到测试库
- 测试脚本和工具:Jmeter、Grinder
- 性能测试平台
2.5 测试执行
- 做好监控:把一切监控起来
* 性能指标:TPS、MRT、RT90值、失败率
* 资源监控:- 监控点:CPU、内存、网络、磁盘
- 监控机器:压测机器、nginx、应用服务、数据库、缓存、消息队列
* 日志监控:检查错误、异常,及时发现错误
* Java监控:堆内存、线程状态、线程数量等