性能测试 - 概述
什么是性能测试:
是不断的通过不同场景的系统表现去探究系统设计与资源消耗之间的平衡。
我们可以认为性能测试是:通过在测试环境下对系统或构件的性能进行探测,用以验证在生产环境下系统性能是否达到预估的性能需求,发现系统可能存在的性能瓶颈,进而改善优化并系统的性能,提高系统的可扩展性、稳定性。
从上面的描述可以看出,性能测试的主要工作包括:获得预估的性能需求、搭建测试环境、执行测试、分析测试结果。其中,最为重要两个工作是确定测试的目的、方案,并对结果进行分析。
性能测试的目的:
(1)验证系统是否满足预期需求;
(2)验证系统在高压下的表现;
(3)验证系统是否能持续稳定的运行;
(4)探测系统的瓶颈和产生瓶颈的原因;
(5)探测系统设计与资源之间的最佳平衡,改善并优化系统的性能。
如何做性能测试:
测试内容:
- 负载测试
- 稳定性测试
- 压力测试
测试流程:
- 确定测试目的与需求
- 根据需求与场景,梳理测试要点
- 根据测试目的,制定测试方案
- 准备测试环境与数据
- 测试执行(脚本或工具)
- 统计测试结果,分析结果,测试报告
注意点:
- 测试执行时,执行多次,取平均结果更为准确
- 单机并发不够时,采用多机分布式并发
- 测试过程,一定要尽可能模拟实际应用场景
关注的指标:
并发用户数、吞吐量、响应时间、失败率
CPU使用率、内存使用率、硬盘、硬盘I/O读写速度、网络带宽、流量等
指标分析:
1.响应时间不要光看平均值,平均值不靠谱。要求最好定成:99.9%请求必须<1s,所有的平均响应时间必须<1s,这两个条件限制;
2.响应时间要和吞吐量TPS/QPS挂钩;
系统的性能如果只看吞吐量,不看响应时间是没有意义的。我的系统可以顶10万请求,但是响应时间已经到了5秒钟,这样的系统已经不可用了,这样的吞吐量也是没有意义的。
我们知道,当并发量(吞吐量)上涨的时候,系统会变得越来越不稳定,响应时间的波动也会越来越大,响应时间也会变得越来越慢,而吞吐率也越来越上不去(如上图所示),包括CPU的使用率情况也会如此。所以,当系统变得不稳定的时候,吞吐量已经没有意义了。吞吐量有意义的时候仅当系统稳定的时候。
所以,吞吐量的值必须有响应时间来卡。比如:TP99小于100ms的时候,系统可以承载的最大并发数是1000qps。这意味着,我们要不断的在不同的并发数上测试,以找到软件的最稳定时的最大吞吐量。
3. 响应时间吞吐量要和成功率挂钩 ;
不难理解,如果请求可以并发10w,但是成功率只有40%,那也没什么用。性能测试的失败率的容忍应该是非常低的。对于一些关键系统,成功请求数必须在100%,一点都不能含糊。
4. CPU、内存等硬件资源占比持续超过90%,说明性能存在瓶颈;
5. 带宽波动起伏很大,说明带宽受限;