【性能测试】常见的性能问题分析思路(一)道与术

微信搜索【大奇测试开】,关注这个坚持分享测试开发干货的家伙。

本次是一篇关于性能测试的,从行业的背景来看,测试开发(包括但不限于平台工具开发、自动化..)和性能测试一直是持续关注最高的,这里暂不讨论新新方向比如音视频、大数据、AI等,毕竟笔者也没过多经验,很多人可能跟我经历很类似,因为不是专门做性能测试,大部分都是利用一些开源工具进行业务是否满足需求上的测试,很少能做或者没经历进步一步的性能分析,以下是组内性测试小组,专注性能测试比较资深伙伴,我们称呼为 “禧子哥” 的一次分享内容,对比好多文章和一些外部分享,个人觉得真的是干货,因此特别争得同意,大奇再此基础上进行部分整理和优化,呈现给大家,最后再次感谢原作者 “禧子” 的干货总结和无私分享。

 

压测目标

性能测试一定是要有它的目的或目标,一切拍脑袋不知道想要干啥的性能测试需要真的是只能用呵呵来形容,分享者基于目前给出,压测有三大目标:

 找出性能的瓶颈

给出基准指标

机器配置容量规划


性能缺陷类型

对于性能问题产生的类型,大体总结为五类,通过一个思维导图展示

【性能测试】常见的性能问题分析思路(一)道与术

性能分析方式方法

任何性能问题出现首先都会有对应现象发生,现象分为前台现象和后台现象,这里我们讲的是前台现象,也就是用户或测试者感受到的表象,如TPS曲线波动,响应时间持续上涨等。有些性能问题,前台表现很正常,用户可以正常使用,但是后台可能发现一些异常现象,例如cpu比较高,可用内存比较少等,这种情况下,不要轻易做任何性能调整,否则可能引发其它性能问题,只要前台使用正常满足业务容量目标即可。
现象可以大致分为3大类

1. 单个功能点慢

java进程还在,系统首页、登录均正常,只是访问到特定功能点,特定接口时比较慢,且现象每次操作都可以重现。


2. 系统慢

java进程还在,系统打开首页、登录操作很慢,或者一直停在那里。即使登录到系统中后,点所有菜单、功能都很慢,整个系统基本无法使用。相当于我们的整条单链路或全链路都受影响

 

3.宕机

java进程自动中止,进程消失。


这3种现象不是孤立存在的,关系如下:

单个功能点慢,一旦积累到一定程度,应用服务器很多线程都在处理此功能时,会导致系统变慢,甚至可能导致宕机。

系统变慢,基本上都是由于用户用操作了某个功能,此功能存在死循环或者资源不释放之类的代码问题,例如发生内存溢出,导致系统变慢。在系统慢的情况下,找出有问题的单个功能点是关键。

宕机,通常也是由于某个功能点的性能问题导致。

只要知道哪个功能点或操作慢,就可以进行优化。多数情况下,我们不知道是什么操作导致的性能问题,分析诊断的主要目的就是找出这些功能和操作。

 

单点慢如何处理    

如果我们已经知道某个功能点慢,并且可以重现,那么问题就比较容易解决了,检查代码、优化sql语句等。多数情况下,单个功能点慢的问题是sql语句执行的慢,抓出执行效率低的sql语句,可以进一步定位问题。对于oracle数据库,可以通过“Plsqldev-工具-会话” 这个工具进行抓取,或者生成AWR报告,对于mysql数据库可以借助explain等解析语句分析。
执行效率低的sql语句查看执行计划,是否走全表扫描,索引创建是否合理,检查基础数据分布是否合理等。

若是B/S的,可以通过httpwatch,fiddler查看哪个点比较慢。


宕机如何处理

根据宕机的解释,多数情况下我们遇到的性能问题并不属于“宕机”,只是我们习惯这么叫而已。一旦出现宕机,唯一可以做的只能是查看宕机日志。根据目前项目经验,所有宕机问题都是由于内存溢出导致(内存溢出并不一定引起宕机),所以如果出现宕机,应该首先检查jvm内存参数是否设置、设置的是否正确,如果确认jvm内存参数没有问题,需要进一步分析宕机日志文件,如heapdump/coredump文件,javacore文件等。

 

系统慢如何处理

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzddyd.html