![ee4aa118d23994247bf7f00fad9c59b9.png](https://i-blog.csdnimg.cn/blog_migrate/63fa4d16508288b22495b14851b63f52.jpeg)
1.介绍性能测试流程
a.性能需求分析(评审)
基于接口或者场景(全链路)的性能测试指标,一般是tps(每秒事务数,这里都是通过的事务)及art(平均响应时间)
b.了解系统架构,申请性能测试环境
用到的web服务器、应用服务器、缓存数据库服务器、数据库服务器、文件服务器等
c.执行性能测试方案
d.搭建测试环境,准备测试数据
数据库的存量数据+增量数据,比如一个查询接口,都是并发100用户,对应的表数据量是1万和100万,压测结果是不一样的,这个数据量根据生产环境获取
e.主流程稳定后,调试被测接口、开发压测脚本(也可以在功能测试环境进行)
参数化、关联、事务、检查点、思考时间等,造参数化测试数据
f.预压测
少量并发(比如一个用户),看压测环境功能是否跑通
g.执行压测并监控服务器资源情况
看测试指标是否满足需求,从请求开始,一步一步排查请求流经的节点,包括服务器资源(CPU、内存、磁盘IO、网络)是否存在性能瓶颈、各种连接等是否存在性能瓶颈
h.分析定位
基于上一步的监控数据,对瓶颈进行分析、定位
i.性能调优
j.性能回归
k.编写性能报告
2.性能测试结果中,我们常关注的指标
1、响应时间(RT):指多长时间响应客户请求
2、吞吐量(TPS):每秒完成的事务数,可以是一个业务流程,也可以是一个表单的提交
3、事务成功率
4、硬件指标:CPU、内存、存储、网络
5、稳定性
6、内存有无泄露
7、其他(数据库、中间件、缓存、JVM)
3.列举性能测试常见问题
我们关注的指标tps和art(平均响应时间),如果tps低,或者响应时间长,或者服务器资源紧张,那就需要我们去定位性能问题了,常见的性能问题主要包含:
a.服务器问题
cpu 内存 磁盘io 磁盘容量
b.网络带宽:看当前收发占用的带宽及有没有丢包
c.load高:看线程信息;看是否fgc
d.队列问题:磁盘io队列、线程队列
e.各种连接池问题:不足或者没释放
f.死锁问题:数据库死锁、线程死锁
g.慢sql问题
h.缓存设置问题
关于磁盘io,我们主要关注以下几个指标:
%iowait:I/O等待所占CPU时间百分比,iowait较大说明IO负载大,IO等待比较严重,磁盘读写遇到瓶颈;
r/s:每秒完成的读 I/O 设备次数;
w/s:每秒完成的写 I/O 设备次数;
rkB/s:每秒读K字节数;
wkB/s:每秒写K字节数;
avgqu-sz:平均I/O队列长度,向设备发出的请求平均数量;如果这个数值大于1,可能是硬件设备已经饱和;
await:平均每次设备I/O操作的时间 (毫秒);
svctm:平均每次设备I/O操作的服务时间 (毫秒);
%util:磁盘设备利用率,一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O队列是非空的,接近100%说明设备能力趋于饱和
磁盘IO繁忙的问题描述:
问题描述:
压测过程中,tps上不去,监控各个服务器cpu、内存、磁盘、网络等等,最终发现是数据库服务器磁盘IO繁忙(命令:iostat -x -k 1),sdb已饱和到达瓶颈点了。如下图(只截了一小部分图):
![a208d7699a8f34d67b3496089fd81ca6.png](https://i-blog.csdnimg.cn/blog_migrate/b3155bc43b0c4755cf058dd5a2327e0e.png)
分析总结:
结合上图及关注指标可知,sdb已经达到饱和(sdb表示第二块磁盘),IO不到20,说明其IO能力很差(r/s,w/s),还不到100就满了,连普通台式机7200转硬盘都赶不上,普通的单个硬盘都100左右,可以按这个公式来计算:1000/(30000/rpm +5),如果是7200RPM,1000ms/9.17ms=109IOPS,1秒钟可以109次IO。
另外,读写效率低,传输率肯定上不去,所以每秒传输的数据量也很小(rkB/s,wkB/s) 。经和运维确认得知:磁盘没有限制,因为是虚拟化,且底层的资源已经用满了,导致只能到这么多。
增加资源后复测,磁盘IO趋于正常,tps上升,最终达到测试目标。