软件测试常见性能问题分析——写给刚毕业的学弟学妹们

前言

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

  1. 需求分析

  2. 脚本准备

  3. 测试执行

  4. 结果整理

  5. 问题分析

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

 

需求描述

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

 

问题及分析

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

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

  • fuzzyMatching

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

 

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

 

perf+火焰图定位函数问题

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

perf

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

  • 使用举例:

  • -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

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

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

 

结尾

下面我收集和整理了一份软件测试学习资源

如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入我们QQ群:(785128166)里面有各种软件测试资源和技术交流。

加油吧,测试员!路就在脚下,成功就在明天!

未来的你肯定会感谢现在拼命的自己!
 

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年4月16日
下一篇 2021年4月16日

相关推荐