一、性能测试
1、概念:
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。通过压力测试,确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。
2、分类:
压力测试:强调极端暴力
稳定性测试:在一定压力下,长时间运行的情况
基准测试:在特定条件下的性能测试
负载测试:不同负载下的表现
容量测试:最优容量
二、性能指标
1、性能指标分类
不同人群关注的性能指标各有侧重。后台服务接口的调用者一般只关心吞吐量、响应时间等外部指标。后台服务的所有者不仅仅关注外部指标,还会关注CPU、内存、负载等内部指标。
(1)、内部指标(资源指标)
从服务器角度看,性能测试主要关注CPU、内存、服务器负载、网络、磁盘IO等
(2)、外部指标(系统指标)
从外部看,性能测试主要关注如下三个指标
-
吞吐量:每秒钟系统能够处理的请求数、任务数。
-
响应时间:服务处理一个请求或一个任务的耗时。
-
错误率:一批请求中结果出错的请求所占比例。
2、外部指标——吞度量
一个系统的吞度量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。单个reqeust 对CPU消耗越高,外部系统接口、IO速度越慢,系统吞吐能力越低,反之越高。
(1)、吞吐量主要受以下三方面因素影响:
-
吞吐量越大,响应时间越长。
-
服务器硬件配置越高,吞吐量越大。
-
网络越差,吞吐量越小。
在低吞吐量下,响应时间的均值、分布比较稳定,不会产生太大的波动。
在高吞吐量下,响应时间会随着吞吐量的增长而增长,增长的趋势可能是线性的,也可能接近指数的。当吞吐量接近系统的峰值时,响应时间会出现激增。
(2)、决定吞吐量的三个重要参数:
QPS(TPS):每秒钟request/事务数量
并发数: 系统同时处理的request/事务数
响应时间: 一般取平均响应时间
注意:很多人经常会把并发数和TPS理解混淆
(3)参数之间的关系:
QPS(TPS)= 并发数/平均响应时间
一个系统吞吐量通常由QPS(TPS)、并发数两个因素决定,每套系统这两个值都有一个相对极限值,在应用场景访问压力下,只要某一项达到系统最高值,系统的吞吐量就上不去了,如果压力继续增大,系统的吞吐量反而会下降,原因是系统超负荷工作,上下文切换、内存等等其它消耗导致系统性能下降。
3、外部指标——响应时间
决定响应时间的要素:系统一次调用的响应时间受CPU运算、IO、外部系统响应等因素影响。
4、外部指标——错误率
错误率和服务的具体实现有关。通常情况下,由于网络超时等外部原因造成的错误比例不应超过5%%,由于服务本身导致的错误率不应超过1% 。
三、针对B/S、C/S软件架构的性能指标
- 对于B/S架构的软件,一般会关注如下Web服务器性能指标:
Avg Rps:平均每秒钟的响应次数=总请求次数/秒数;
Avg time to last byte per terstion (mstes):平均每秒业务脚本的迭代次数;
Successful Hits:成功的点击次数;
Failed Hits:失败的点击次数;
Hits Per Second:每秒点击次数;
Successful Hits Per Second:每秒成功的点击次数;
Failed Hits Per Second:每秒失败的点击次数;
Attempted Connections:尝试连接数;
Throughput:吞吐率;
- 对于C/S架构的程序,由于软件后台通常为数据库,所以我们更注重数据库的测试指标。
User Connections:用户连接数,也就是数据库的连接数量;
Nunber of Deadlocks:数据库死锁;
Butter Cache Hit:数据库Cache的命中情况。
四、常见性能瓶颈
1、内存持续上涨:在吞吐量固定的前提下,如果内存持续上涨,那么很有可能是被测服务存在明显的内存泄漏,需要使用valgrind等内存检查工具进行定位。
五、获取并分析性能指标数据
1、内部指标:
(1)、Windows系统——利用设备的任务管理器(执行taskmgr)
Chrome内部的任务管理器(浏览器各链接占用系统的数据)
(2)、Linux系统——利用linux指令
获取指定进程的CPU使用情况最常用的是top命令;
网络流量监控可以使用nethogs命令;
监控磁盘状态用iostat命令;
(Linux不做详细讲解)
2、外部指标:
注意:使用Jmeter工具进行压力测试,通过不同类型的监听器获取各项指标数据,并对系统进行性能分析;