后台性能测试不可不知的二三事

上一篇 / 下一篇  2017-09-21 11:43:09 / 个人分类:软件测试

概述

 

不同人群关注的性能指标各有侧重。后台服务接口的调用者一般只关心吞吐量、响应时间等外部指标。后台服务的所有者不仅仅关注外部指标,还会关注CPU、内存、负载等内部指标。

 

拿某打车平台来说,它所关心的是智能提示的外部指标能不能抗住因大波优惠所导致的流量激增。而对于智能提示服务的开发、运维、测试人员,不仅仅关注外部指标,还会关注CPU、内存、IO等内部指标,以及部署方式、服务器软硬件配置等运维相关事项。

 

 

外部指标

 

从外部看,性能测试主要关注如下三个指标

 

    吞吐量:每秒钟系统能够处理的请求数、任务数。

 

    响应时间:服务处理一个请求或一个任务的耗时。

 

    错误率:一批请求中结果出错的请求所占比例。

 

响应时间的指标取决于具体的服务。如智能提示一类的服务,返回的数据有效周期短(用户多输入一个字母就需要重新请求),对实时性要求比较高,响应时间的上限一般在100ms以内。而导航一类的服务,由于返回结果的使用周期比较长(整个导航过程中),响应时间的上限一般在2-5s

 

   对于响应时间的统计,应从均值、.90.99、分布等多个角度统计,而不仅仅是给出均值。下图是响应时间统计的一个例子

 

吞吐量的指标受到响应时间、服务器软硬件配置、网络状态等多方面因素影响。

 

    吞吐量越大,响应时间越长。

 

    服务器硬件配置越高,吞吐量越大。

 

    网络越差,吞吐量越小。

 

在低吞吐量下的响应时间的均值、分布比较稳定,不会产生太大的波动。

 

在高吞吐量下,响应时间会随着吞吐量的增长而增长,增长的趋势可能是线性的,也可能接近指数的。当吞吐量接近系统的峰值时,响应时间会出现激增。

 

错误率和服务的具体实现有关。通常情况下,由于网络超时等外部原因造成的错误比例不应超过5%%,由于服务本身导致的错误率不应超过1%

 

 

内部指标

 

 

从服务器的角度看,性能测试主要关注CPU、内存、服务器负载、网络、磁盘IO

CPU

 

后台服务的所有指令和数据处理都是由CPU负责,服务对CPU的利用率对服务的性能起着决定性的作用。

 

Linux系统的CPU主要有如下几个维度的统计数据

 

    us:用户态使用的cpu时间百分比

 

    sy:系统态使用的cpu时间百分比

 

    ni:用做nice加权的进程分配的用户态cpu时间百分比

 

    id:空闲的cpu时间百分比

 

    wacpu等待IO完成时间百分比

 

    hi:硬中断消耗时间百分比

 

    si:软中断消耗时间百分比

 

下图是线上开放平台转发服务某台服务器上top命令的输出,下面以这个服务为例对CPU各项指标进行说明

 

us & sy:大部分后台服务使用的CPU时间片中ussy的占用比例是最高的。同时这两个指标又是互相影响的,us的比例高了,sy的比例就低,反之亦然。通常sy比例过高意味着被测服务在用户态和系统态之间切换比较频繁,此时系统整体性能会有一定下降。另外,在使用多核CPU的服务器上,CPU 0负责CPU各核间的调度,CPU 0上的使用率过高会导致其他CPU核心之间的调度效率变低。因此测试过程中CPU 0需要重点关注。

 

ni:每个Linux进程都有个优先级,优先级高的进程有优先执行的权利,这个叫做pri。进程除了优先级外,还有个优先级的修正值。这个修正值就叫做进程的nice值。一般来说,被测服务和服务器整体的ni值不会很高。如果测试过程中ni的值比较高,需要从服务器Linux系统配置、被测服务运行参数查找原因

 

id:线上服务运行过程中,需要保留一定的id冗余来应对突发的流量激增。在性能测试过程中,如果id一直很低,吞吐量上不去,需要检查被测服务线程/进程配置、服务器系统配置等。

 

wa:磁盘、网络等IO操作会导致CPUwa指标提高。通常情况下,网络IO占用的wa资源不会很高,而频繁的磁盘读写会导致wa激增。如果被测服务不是IO密集型的服务,那需要检查被测服务的日志量、数据载入频率等。

 

hi & si:硬中断是外设对CPU的中断,即外围硬件发给CPU或者内存的异步信号就是硬中断信号;软中断由软件本身发给操作系统内核的中断信号。通常是由硬中断处理程序或进程调度程序对操作系统内核的中断,也就是我们常说的系统调用(System Call)。在性能测试过程中,hi会有一定的CPU占用率,但不会太高。对于IO密集型的服务,siCPU占用率会高一些。

内存

 

性能测试过程中对内存监控的主要目的是检查被测服务所占用内存的波动情况。

 

Linux系统中有多个命令可以获取指定进程的内存使用情况,最常用的是top命令,如下图所示

 

其中

 

    VIRT:进程所使用的虚拟内存的总数。它包括所有的代码,数据和共享库,加上已换出的页面,所有已申请的总内存空间

 

    RES:进程正在使用的没有交换的物理内存(栈、堆),申请内存后该内存段已被重新赋值

 

    SHR:进程使用共享内存的总数。该数值只是反映可能与其它进程共享的内存,不代表这段内存当前正被其他进程使用

 

    SWAP:进程使用的虚拟内存中被换出的大小,交换的是已经申请,但没有使用的空间,包括(栈、堆、共享内存)

 

    DATA:进程除可执行代码以外的物理内存总量,即进程栈、堆申请的总空间

 

从上面的解释可以看出,测试过程中主要监控RESVIRT,对于使用了共享内存的多进程架构服务,还需要监沙发控SHR

LOAD(服务器负载)

 

Linux的系统负载指运行队列的平均长度,也就是等待CPU的平均进程数

 

从服务器负载的定义可以看出,服务器运行最理想的状态是所有CPU核心的运行队列都为1,即所有活动进程都在运行,没有等待。这种状态下服务器运行在负载阈值下。

 

通常情况下,按照经验值,服务器的负载应位于阈值的70%~80%,这样既能利用服务器大部分性能,又留有一定的性能冗余应对流量增长。

 

Linux提供了很多查看系统负载的命令,最常用的是topuptime

 

topuptime针对负载的输出内容相同,都是系统最近1分钟、5分钟、15分钟的负载均值

 

查看系统负载阈值的命令如下

 

在性能测试过程中,系统负载是评价整个系统运行状况最重要的指标之一。通常情况下,压力测试时系统负载应接近但不能超过阈值,并发测试时的系统负载最高不能超过阈值的80%,稳定性测试时,系统负载应在阈值的50%左右。

网络

 

性能测试中网络监控主要包括网络流量、网络连接状态的监控。

网络流量监控

 

可以使用nethogs命令。该命令与top类似,是一个实时交互的命令,运行界面如下

 

在后台服务性能测试中,对于返回文本结果的服务,并不需要太多关注在流量方面。

网络连接状态监控

 

性能测试中对网络的监控主要是监控网络连接状态的变化和异常。对于使用TCP协议的服务,需要监控服务已建立连接的变化情况(即ESTABLISHED状态的TCP连接)。对于HTTP协议的服务,需要监控被测服务对应进程的网络缓冲区的状态、TIME_WAIT状态的连接数等。Linux自带的很多命令如netstatss都支持如上功能。下图是netstat对指定pid进程的监控结果

 

 

磁盘IO

 

性能测试过程中,如果被测服务对磁盘读写过于频繁,会导致大量请求处于IO等待的状态,系统负载升高,响应时间变长,吞吐量下降。

 

 

重要通知:博为峰网校助力2017求职季,特别推出测试集训营,更多精品课程打折、送券……惊喜不停歇,最低五折起限时抢购,快来~

活动链接:http://h.atstudy.com/activity/


TAG: 性能测试 软件测试

 

评分:0

我来说两句

Open Toolbar