• 0
  • 0
分享

  前言

  性能测试大致分以下几个步骤:

  1.需求分析

  2.脚本准备

  3.测试执行

  4.结果整理

  5.问题分析

  今天要说的是最后一个步骤——“问题分析”。

  需求描述

  有一个服务,启动时会加载一个1G的词表文件到内存,请求来了之后,会把请求词去词表里做模糊匹配,如果匹配到了就向一个后端服务发送一条http请求,拿回数据之后,返回给客户端的同时,向mysql记录请求的唯一标识和一个请求次数的标记; 

  其中有几个关键函数 :

  ·模糊匹配(fuzzyMatching) 

  · 后端请求函数(sendingRequest) 

  · 拼装请求函数(buildResponse) 

  · 记录mysql请求次数标记(signNum)

  问题及分析

  第一组:完全随机请求词,qps达到1k时,服务器未见异常,cpu、内存、带宽均未满,qps无法继续提升;

  分析:由于此服务后端连接了其它服务,所以在压测之前,要确认后端服务不会成为瓶颈点,目前的状态很可能是后端服务限制了被测服务的性能;此时可以检查后端服务所在机器的各项指标,或者查看本机的连接状况,一般后端服务无法处理,而被测服务又会一直向后面请求的话,timewait状态的连接会变得比较多;

  第二组:解决后端服务的问题后,第二组使用平均30个字的请求词,来打压,qps到400时,cpu load已满;

  分析:这种情况明显是由于fuzzyMatching函数计算效率的问题导致cpu满载,从而无法提升qps,使响应时间不断增大,此时可以通过perf+火焰图来确定整个处理请求过程中响应时间长的函数;此时需要评估压测数据是否合理,如果线上平均请求词只有2个的时候,此组测试明显不合理,此时要开发进行性能优化就是浪费时间的;如果评估测试数据合理,可以再次更换短词数据进行压测验证猜测;

  第三组:解决了上述两个问题之后,使用完全随机请求词,qps到达3k后降低至1k,然后再次提升到3k,如此反复;

  分析:此时关注一下各项指标,排除了以上的问题的话,操作mysql慢的问题可能性大一些,对这种需要高并发的系统来说,直接读写mysql不是个聪明的解决方案,一般会用redis做一层缓存,这里说道的另一个问题就是开发设计不合理,导致的性能问题; 

  第四组:将后端换做真实的服务来做整体压测,发现qps最高只能到300,此时检查各项指标,发现入口带宽占满了;

  分析:这次问题比较明显,后端服务返回内容过大,导致带宽被占满,此时依然需要评估需求:1、是否需要后端返回的所有数据内容;2、评估更换万兆网卡的性价比;3、是否可以通过技术手段优化带宽占用,比如把一次请求分散到多组服务的多个请求;

  perf+火焰图定位函数问题

  这里简单说一下如何使用perf+火焰图来直观的定位性能问题:

  perf

  Perf 拥有了众多的性能分析能力,举例来说,使用 Perf 可以计算每个时钟周期内的指令数,称为 IPC,IPC 偏低表明代码没有很好地利用 CPU。Perf 还可以对程序进行函数级别的采样,从而了解程序的性能瓶颈究竟在哪里等等。Perf 还可以替代 strace,可以添加动态内核 probe 点,还可以做 benchmark 衡量调度器的好坏。

  · 使用举例:perf record -e cpu-clock -g -p 11110 -o data/perf.data sleep 30

  · -g 选项是告诉perf record额外记录函数的调用关系 

    -e cpu-clock 指perf record监控的指标为cpu周期 

    -p 指定需要record的进程pid

  生成火焰图

  1、第一步 

  使用压力测试工具对程序进行打压,压到程序拐点; 

  $sudo perf record -e cpu-clock -g -p 11110 

  Ctrl+c结束执行后,在当前目录下会生成采样数据perf.data. 

  2、第二步 

  用perf script工具对perf.data进行解析 

  perf script -i perf.data &> perf.unfold 

  3、第三步 

  将perf.unfold中的符号进行折叠: 

  ./stackcollapse-perf.pl perf.unfold &> perf.folded 

  4、最后生成svg图: 

  ./flamegraph.pl perf.folded > perf.svg

  到这儿可以生成函数调用火焰图,如下图:

1.jpg

  原生的perf可以直接定位C/C++的程序,通常编译debug版本的程序能看到更多的信息,java、go等语言可以通过各自定制的工具来生成,原理类似;通过火焰图可以轻松定位到哪个函数的处理时间最长,从而找到问题所在;

  结尾

  本文YY了一个项目,YY了一些场景来分析一些真实的性能问题,平时的性能测试中遇到的问题远比文中列举的多,有代码逻辑问题、服务器配置问题、服务部署问题、甚至需求合理性的问题,每个问题都有自己分析定位的套路,掌握了这个套路就可以解决各种问题,大家可以留言分享自己遇到过的性能问题,及分析过程和最终的解决方案,丰富这个套路~


作者:佚名    

来源:http://www.51testing.com/html/64/n-7798264.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 简介软件测试是一个快速发展的职业领域,随着信息技术的不断发展和应用,软件测试的重要性也越来越受到重视。软件测试职业是指专门从事软件测试工作的人员,他们负责对软件系统进行全面、深入、有效的测试,发现和解决软件中的缺陷和错误,提高软件的质量和可靠性。软件测试职业的发展前景广阔,随着信息技术的不断发展和应用,软件测试职业的需求也越来越大。软件测试职业可以在各种行业和领域中得到广泛的应用,包括互联网、金融、医疗、教育、制造等领域。软件测试职业的薪资待遇也较为优厚,具有一定的职业晋升空间和发展前景。下面是关于软件测试的详细介绍和内容。软件测试是指在软件开发过程中,通过对软件系统进行各种测试活动,发现和纠...
            0 0 980
            分享
          • Vim是Linux系统上最常用的文本编辑器,本文将介绍一些vim常用的命令。插入命令a 在光标后插入A 在光标所在行的行尾后插入i 在光标前插入I 在光标所在行的行首前插入o 在光标下插入新行O 在光标上插入新行gi 进入到上一次插入模式的位置<ESC> 退出插入模式定位命令:set number 设置显示行号:set nonumber 取消行号gg 到第一行G 到最后一行nG 跳到第n行:n 跳到第n行$ 移至行尾0 移至行首删除命令x 删除光标所在处的字符nx 删除光标所在处后n个字符dd 删除光标所在行ndd 删除光标在内的n行dG 删除光标所在行到文件末尾的内容D 删除光标...
            0 0 1227
            分享
          •   前言  报告功能测试的结果相对简单,因为这些测试有明确的通过或失败结果。  报告性能测试的结果就要微妙得多,而且显示这些值的方法有很多——但是作者认为这些方法都没有特别有效。他提出了一种报告方法,使性能测试结果更易于阅读和理解。  有效地报告测试结果  有效地报告测试结果是我们职业的圣杯之一。如果做的好,它能提高项目的质量,并帮助我们专注于真正的问题;但如果做得不好,就会增加混乱,降低测试人员带来的价值。  报告功能测试的结果相对简单,因为这些测试有明确的通过或失败结果,报告性能测试的结果就要微妙得多。  让我们从一个定义开始:为了本文的目的,我使用了一个术语——性能试验,指任何执行度量的...
            0 0 945
            分享
          •   前言  CANape是一款用于ECU测量、标定、诊断以及ADAS传感器数据采集的工具型软件。  测量——通过CANape不仅能采集记录ECU内部信号,还支持与车辆上的各种传感器的总线进行通信。与ECU不同,ADAS传感器不提供车辆实际运行信号,而是提供车辆运行时周围环境的详细信息,如通过摄像头和雷达传感器感知周围环境。传感器感知周围环境,将车身所处环境信息传至ECU通过ADAS算法分析决策之后,控制相应执行器动作。环境感知是ADAS技术中最基础、最重要的一环,感知系统提供信息的准确性直接影响到了整个ADAS系统的性能。通过CANape对传感器识别感知信息进行采集,以提高ADAS系统分析决策...
            0 0 2489
            分享
          •   1、前言  以前待过一个测试组,做过的项目虽然不大,但是里面涉及到很多超链接,于是手动点击这些链接就花费很多时间,后来我就想如果工作觉得累,那肯定有什么地方需要改进,于是我就网上搜索可以检查超链接的自动化工具或方法,结果还真的让我找到了妙法!这就是接下来我要隆重介绍的小巧且好用的工具——Xenu!  2、简介  Xenu 全称 Xenu’s Link Sleuth 是一款界面简单,功能强大的软件,你可以打开一个本地网页文件来检查它的链接,也可以输入任何网址来检查,它可以分别列出网站的活链接以及死链接,连转向链接它都分析得一清二楚,支持多线程,可以把检查结果存储成文本文件或网页文件。  主要...
            0 0 1037
            分享
      • 51testing软件测试圈微信