性能测试测试

如何面试性能测试

2019-04-20  本文已影响61人  wengy

原文地址:https://www.cnblogs.com/UncleYong/p/10641248.html

最近,在一些群里经常看到有测试朋友在问有没有性能测试面试的资料,

因为自己也一直在做性能测试,所以就做个总结分享给大家吧(可能你看了会懵逼,你可以点击左侧加群来聊聊)。

但是,做性能需要掌握的知识面很宽泛(linux、数据库、各种中间件的基本配置调优等等),而且还需要一定的深度,这样才能去做性能分析、定位,所以大家一定要坚持学习。

一般来说,面试性能,围绕以下几个方面去说就可以了:

性能测试流程

1.性能需求分析

  基于接口或者场景(全链路)的性能测试指标,一般是tps(每秒事务数,这里都是通过的事务)及art(平均响应时间)

2.了解系统架构,申请性能测试环境

  用到的web服务器、应用服务器、缓存数据库服务器、数据库服务器等

3.制定性能测试方案

4.搭建测试环境,准备测试数据

  性能测试,数据库的存量数据,比如一个查询接口,都是并发100用户,对应的表数据量是1万和100万,压测结果是不一样的,这个数据量根据生产环境获取

5.主流程稳定后,开发压测脚本

  参数化、关联、事务、思考时间、断言等

6.预压测

  少量并发(比如1个用户),看压测环境功能是否通

7.执行压测并监控服务器资源情况

  看测试指标是否满足需求及服务器资源(cpu、内存、磁盘io、网络)是否存在瓶颈

8.分析定位

  从请求开始,一步一步排查请求流经的节点

9.优化,性能回归

10.性能报告 

性能测试常见问题

性能测试结果中,我们关注的指标是tps和art,如果tps低,或者响应时间长,那就需要我们去定位性能问题了,

常见的性能问题主要包含:

  a.客户端问题,比如压力机服务器资源不足,请求发不出去

cpu:top/vmstat

内存:free -m

磁盘io:iostat -x -k 1

  b.网络带宽,通过nmon或者sar定位;看有没有丢包

  c.应用服务器load高:top、jstack等

  d.oom:fgc频繁,jstat -gcutil

  e.等待io:看io有没有排队

  f.web容器排队,连接池问题(不足或者没释放)

  g.数据库连接池排队,连接池问题(不足或者没释放)

  h.慢查询

  i.数据库死锁

  j.线程死锁:jstack

  k.代码业务逻辑

性能测试问题定位举例

最近的性能测试中,遇到一个数据库连接池不释放的问题,下面描述下定位到这个问题的流程。

我们用的是dubbo框架

1.首先,压测过程中,请求失败了,所以,赶紧去看provider服务器日志(tail -f -n500 xxx.log),抛出的错误是:

2.原来是没获取到数据库的连接池,马上去看了下配置文件(less db.properties,最大连接数配置的100,此时并发的150),首先想到的是连接数配置的小了,于是改为150,当然,这个需要比数据库自身允许的连接数小,显示数据库最大连接数:select value from v$parameter where name ='processes'; 

重启服务,初始化数据库中的数据

注意:实,连接数并不是一定要比并发数大,因为由于漏斗原理,哪怕并发150,实际到数据库的并发可能只有几十

3.重新压测,过了一会儿,还是报相同的错,此时我并发的150,于是,怀疑要么是有其他人也在用我的数据库服务器,要么就是数据库连接池没释放

4.马上连接到consumer服务器,首先看有没非我压力机的ip

netstat -an | grep 72.32.3.141:8080 | awk '{print $5}' | awk -F ':' '{print $4}' | sort | uniq -c | sort -nr

结果只有我压力机的ip,排除其它人在用我的服务器,所以很可能就是数据库连接池没有释放了

5.停止压测,过了一段时间,查数据库的连接数

显示数据库当前的连接数:select count(*) from v$process; 

结果是150+,连接池被占满了

6.再次修改连接池,改为200,重新压测,依旧报相同的错,查数据库的连接数,连接池也被占满了

7.过了一段时间再查,连接池依旧是被占满的状态,至此,可以断定,是数据库连接池未释放。

这个性能问题相对简单,因为错误日志已经为我们指明了大致的方向。 

上一篇下一篇

猜你喜欢

热点阅读