一.性能测试概况
性能测试是一个总称,具体可细分为性能测试、负载测试、压力测试、稳定性测试
性能测试:
以系统设计初期规划的性能指标为预期目标、对系统不断施加压力、验证系统在资源可接受的范围内、是否达到性能预期。
负载测试:
对系统不断的请求以增加系统压力,直到系统的某项或多项性能指标达到安全临界值。
压力测试:
在超过安全负载的情况下,对系统继续施加压力,直到系统崩溃或不能再处理任何请求,以此获得系统最大压力承受能力。
稳定性测试:
被测系统在特定硬件、软件、网络环境下,给系统加载一定业务压力,使系统运行一段较长时间,以检测系统是否稳定。
二.性能的资源指标
对互联网服务进行服务端性能测试时,主要关注两方面的性能指标:
1.业务指标
比如吞吐量(QPS、TPS),响应时间(RT)、并发数、业务成功率等。
2.资源指标,如CPU、内存、Diski/o、network i/o等资源的消耗情况。
2.1 CPU使用率
有进程处于running状态的时间/总时间,在vmstat主要通过us、sys和id三列数据来体现:
us:用户占用cpu的百分比
sy:系统(内核和中断)占用cpu的百分比
id:cpu空闲的百分比
性能测试指标中,cpu使用率通常用us+sy来计算,其可接受上限通常在70%-80%。另外,需要注意的是,在测试过程中,如果sy的值长期大于25%,应该关注in(系统中断)和cs(上下文切换)的数值,并根据被测应用的实现逻辑来分析是否合理。
2.2 运行队列进程数
running状态+waiting状态的进程数,展示了正在运行和等待cpu资源的任务数,可以看作cpu的工作清单,是判断cpu资源是否成为瓶颈的重要依据,在vmstat主要通过r的值来体现。(r,可运行进程数,如果r的值等于系统cpu总核数,则说明cpu已经满负荷,在负载测试中,其可接受上限通常不超过cpu核数的2倍)
2.3 上下文切换
context是指cpu寄存器和程序计数器在某时间点的内容,进程上下文切换即kernel挂起一个进程并将该进程此时的状态存储到内存,然后从内存中恢复下一个要执行的进程原来的状态道寄存器,从其上次暂停的执行代码开始继续执行至频繁的上下文切换将导致sy值增长,在vmstat通过cs的值来体现。(cs,每秒上下文切换次数)
2.4 平均负载Load Average
在unix系统中,load是对系统工作量的度量。load取值有两种情况,多数unix系统取运行队列的值(vmstat输出的r),而linux系统取运行队列的值+处于task_uninterruptible状态的进程数(vmstat输出的b),所以会出现cpu使用率不高但load值很高的情况。Load average就是一段时间内的平均负载,系统工具top、uptime等提供1分钟、5分钟、15分钟的的平均负载值。比如下图中0.28即是1分钟内的load
average,当我们需要了解当前系统负载情况时,可以先查看load average的值,如果系统持续处于高负载(如15分钟平均负载大于cpu总核数的两倍),则查看vmstat的r值和b值来确认是cpu负荷重还是等待I/O的进程太多。
三.性能分析
排查一个网站的性能瓶颈和排查一个程序的性能瓶颈手法基本相同,检查请求处理的各个环节的日志、分析哪个环节响应时间不合理、超过预期;然后检查监控数据,分析影响性能的主要因素是内存、磁盘、网络还是cpu,是代码问题还是架构设计不合理、或者系统资源确实不足
四.性能方案制定
性能测试是基于功能测试来进行的,先分析单个用户的功能流程以及系统的数据流向(包括后台的数据流向)结构图,然后再考虑大量的用户操作。步骤如下:
1)确认测试目标
2)分析被测系统业务需求
3)分析被测系统的系统结构
4)分析被测系统的性能测试点(可能产生性能瓶颈的节点/是否有外部不可压系统/是否需要开发配合改动)
5)设计测试方案、检测方案和测试案例
6)选择测试工具
7)测试开发
8)测试执行
9)测试结果分析
10)测试调优测试验证测试分析
11)测试报告
网友评论