一、前言
性能测试是个涉及范围比较广泛的工作,想要做好对于前端、网络、中间件、代码、数据库、服务器等信息都有所了解,在分析时可以通过错误信息或者一些压测结果的数据分析出对应的问题所在,所以想把性能测试学好也是一个漫长的积累的过程。
二、结果分析
2.1分析思路
性能测试结果分析可以分为两个部分,一个是场景的压测结果数据的分析,一个是服务器资源监控数据的分析,两个部分在分析时需要相结合的去看,才能分析出结果是否满足我们的需求,有问题时问题在什么环节,在分析的过程中可以多关注以下几点:
1、收集好相关的测试数据,在测试完成后要将对应运行的各个场景的场景结果数据、服务器监控数据收集起来,汇总到一块,并于后续进行分析;
2、注意分析数据的趋势,在测试过程中随着压力的增长,服务器的处理能力也是逐步在增长,服务器资源的消耗也是呈现逐步增长的趋势,如果压力增长到服务器处理能力呈现增长到呈下降趋势,说明可能是服务器的最大处理能力出现了,如果压力逐步在增长,服务器处理能力不变、服务器资源消耗不变,或者压力很小,服务器资源消耗确很大,这都是明显的异常情况,需要去分析定位原因;
3、注意压测过程中服务器的错误信息,如果在压测过程中出现错误信息,有时候通过报错信息我们可以直接定位到问题所在,这个问题可能就是导致服务器瓶颈的原因;
4、注意测试结果数据中的异常指标,在压测过程中如果测试结果的某个指标异常,可以重点关注一下该指标的数据是否是正确的,如果不正确为什么会出现此种情况。
2.2关注指标
测试结果我们要关注的指标主要分两部分,一分部为系统指标,一部分为资源指标。
系统指标:主要关注TPS、平均响应时间、事务成功率、超时错误率;
TPS:Transactions Per Second(每秒处理的事物个数)表示服务器每秒处理的请求数量;
平均响应时间:系统处理事务的响应时间的平均值。事务的响应时间是从客户端提交访问请求到客户端接收到服务器响应所消耗的时间;
事务成功率:事务的定义可以是单个请求,也可以是多个请求的组合,也可以把整个脚本看成一个事务,事务成功率代表我们发送的请求是否都被系统按照预期正确处理,如果有大批量的失败情况,则需要重点关注;
超时错误率:主要指事务由于超时或系统内部其它错误导致失败占总事务的比率,如果有大量失败的情况需要重点关注。
资源指标:CPU、内存、IO、带宽;
CPU:主要关注用户进程与系统进程消耗的CPU时间百分比,长时间情况下,一般可接受上限不超过85%【上限可也根据公司实际情况进行适当调整】;
内存:主要关注内存的使用情况,内存利用率=(1-空闲内存/总内存大小)*100%,一般至少有10%可用内存,内存使用率可接受上限为85%【上限可也根据公司实际情况进行适当调整】;
IO:磁盘的操作主要分两种一个是读取数据、一个是写入数据,通常情况通过Disk Time(磁盘用于读写操作所占用的时间百分比)度量磁盘读写性能;
带宽:主要关注发送跟接收的速率,通常以Bytes Total/sec表示为发送和接收字节的速率,包括帧字符在内。判断网络连接速度是否是瓶颈,可以用该计数器的值和目前网络的带宽比较。
三、问题定位思路
1、问题表现明确,比如内存溢出、连接超时等有很明确的错误,我们就可以直接去找一下是哪段代码导致的此问题,定位到具体代码后进行优化,完成优化后再次验证一下系统处理能力是否有所改善;
2、问题表现不明确,我们从系统测试结果数据中不能很明确的定位到问题,系统又无报错信息,此时我们就要有一个取分析定位问题的思路,我们可以采取从前到后的顺序去逐步分析定位,从 执行机 --- 前端 --- 网络 --- 负载均衡策略 --- 中间件 --- 代码 --- 数据库 --- 服务器 --- 硬件 这样一步步的去分析定位看看到底是哪个环节出了问题。
四、总结
通过几篇总结将性能测试的过程进行了一个简单的描述,在描述的过程中并未提及太多性能测试工具的信息,我认为想要把性能测试需要好就必须要了解清楚整个过程每个环节,每个步骤我们需要做什么,怎么去做,每个环节准入准出的条件是什么,把这些掌握了剩余的只是我们找一个适合的工具去实现我们想要的东西即可,所以建议学习性能测试的同学不要上来就一味的去学习某个性能测试工具,工具掌握的再熟悉性能测试的方法论不了解还是没法去正确的做性能测试。
无论是工作还是生活,我们不管是做什么事情,有了正确的方法论【理论知识】 + 合适的手段【方法、工具】 + 合理的时间安排【正确的时间】 才能把事情做好。