测试开发

Linux_后台性能测试

2017-01-04  本文已影响486人  古佛青灯度流年

某月黑风高之夜,某打车平台上线了一大波(G+)优惠活动,众人纷纷下单。于是乎,该打车平台使用的智能提示服务扛不住直接趴窝了(如下图)。事后,负责智能提示服务开发和运维的有关部门开会后决定:必须对智能提示服务进行一次全面深入的性能摸底,立刻!现在!马上!



那么一大坨问题就迎面而来:对于智能提示这样的后台服务,性能测试过程中应该关心那些指标?这些指标代表什么含义?这些指标的通过标准是什么?下面将为您一一解答。

概述

不同人群关注的性能指标各有侧重。后台服务接口的调用者一般只关心吞吐量、响应时间等外部指标。后台服务的所有者不仅仅关注外部指标,还会关注CPU、内存、负载等内部指标。
拿某打车平台来说,它所关心的是智能提示的外部指标能不能抗住因大波优惠所导致的流量激增。而对于智能提示服务的开发、运维、测试人员,不仅仅关注外部指标,还会关注CPU、内存、IO等内部指标,以及部署方式、服务器软硬件配置等运维相关事项。

外部指标

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

内部指标

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

CPU

后台服务的所有指令和数据处理都是由CPU负责,服务对CPU的利用率对服务的性能起着决定性的作用。
Linux系统的CPU主要有如下几个维度的统计数据

us & sy:大部分后台服务使用的CPU时间片中us和sy的占用比例是最高的。同时这两个指标又是互相影响的,us的比例高了,sy的比例就低,反之亦然。通常sy比例过高意味着被测服务在用户态和系统态之间切换比较频繁,此时系统整体性能会有一定下降。另外,在使用多核CPU的服务器上,CPU 0负责CPU各核间的调度,CPU 0上的使用率过高会导致其他CPU核心之间的调度效率变低。因此测试过程中CPU 0需要重点关注。
ni:每个Linux进程都有个优先级,优先级高的进程有优先执行的权利,这个叫做pri。进程除了优先级外,还有个优先级的修正值。这个修正值就叫做进程的nice值。一般来说,被测服务和服务器整体的ni值不会很高。如果测试过程中ni的值比较高,需要从服务器Linux系统配置、被测服务运行参数查找原因
id:线上服务运行过程中,需要保留一定的id冗余来应对突发的流量激增。在性能测试过程中,如果id一直很低,吞吐量上不去,需要检查被测服务线程/进程配置、服务器系统配置等。
wa:磁盘、网络等IO操作会导致CPU的wa指标提高。通常情况下,网络IO占用的wa资源不会很高,而频繁的磁盘读写会导致wa激增。如果被测服务不是IO密集型的服务,那需要检查被测服务的日志量、数据载入频率等。
hi & si:硬中断是外设对CPU的中断,即外围硬件发给CPU或者内存的异步信号就是硬中断信号;软中断由软件本身发给操作系统内核的中断信号。通常是由硬中断处理程序或进程调度程序对操作系统内核的中断,也就是我们常说的系统调用(System Call)。在性能测试过程中,hi会有一定的CPU占用率,但不会太高。对于IO密集型的服务,si的CPU占用率会高一些。

内存

性能测试过程中对内存监控的主要目的是检查被测服务所占用内存的波动情况。
在Linux系统中有多个命令可以获取指定进程的内存使用情况,最常用的是top命令,如下图所示



其中

LOAD(服务器负载)

Linux的系统负载指运行队列的平均长度,也就是等待CPU的平均进程数
从服务器负载的定义可以看出,服务器运行最理想的状态是所有CPU核心的运行队列都为1,即所有活动进程都在运行,没有等待。这种状态下服务器运行在负载阈值下。
通常情况下,按照经验值,服务器的负载应位于阈值的70%~80%,这样既能利用服务器大部分性能,又留有一定的性能冗余应对流量增长。
Linux提供了很多查看系统负载的命令,最常用的是top和uptime
top和uptime针对负载的输出内容相同,都是系统最近1分钟、5分钟、15分钟的负载均值




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



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

网络

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

磁盘IO

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


从iostat的输出中,能够获得系统运行最基本的统计数据。但对于性能测试来说,这些数据不能提供更多的信息。需要加上-x参数


常见性能瓶颈

举个 (栗子) 例子

智能提示服务趴窝了以后,必须立刻对其做性能摸底。根据目前的情况,测试结果中需要提供外部指标和内部指标。
智能提示服务的架构和每个模块的功能如下图所示



从图中我们可以看出,测试前智能提示服务的底层数据服务已经确定了性能上限。因此,本次测试我们的任务是在底层数据服务性能为3500qps的前提下,找到智能提示服务上游各个模块的性能上限。
一个完整的后台服务性能测试流程如下图所示。


测试前准备:

压测过程:

我们使用Jmeter发送测试数据来模拟用户请求,Jmeter测试配置文件使用的原件如下图所示。从图中可以看出,性能测试的配置文件主要由数据文件配置(线程间共享方式、到达末尾时的行为等)、吞吐量控制、HTTP采样器(域名、端口、HTTP METHOD、请求body等)、响应断言(对返回结果的内容进行校验)。


在linux中,sar、top、ps等命令都可以对cpu使用情况进行监控。一般来说,最常用的是top命令。top命令的输出如下:


top命令是一个交互式命令,运行后会一直保持在终端并定时刷新。在性能测试中,可以使用如下参数让top命令只运行一次

$top –n 1 –b –p ${pid}

linux中,服务器负载使用uptime命令获取,该命令的输出如下图



每一列的含义如下:
“当前时间 系统运行时长 登录的用户数最 近1分钟、5分钟、15分钟的平均负载”

结语

测试完毕后,得出的结论是单台智能提示服务的性能是300qps,线上整套智能提示服务的性能是1800qps;而月黑风高那天的流量大概是5000qps+,难怪智能提示趴窝,确实流量太大,远超线上的吞吐容量。
最后,智能提示服务申请了服务器进行扩容,并对某打车平台的流量进行了限制,既开源又节流,保证今后月黑风高之夜一众约酒、约饭、约P之人的打车体验,提高了各种约的成功率,可谓功德无量。

转:腾讯移动品质中心TMQ

上一篇 下一篇

猜你喜欢

热点阅读