在这里插入图片描述
你好,我是软件测试情报局,目前在一家准一线互联网大厂做测试开发工程师。

对于一般公司普通测试工程师来说,可能性能测试做的并不是很复杂,可能只是编写下脚本,做个压测,然后输出报告结果,瓶颈分析和调优的事都丢给开发去做。

在一些大厂都有专门的性能测试团队去定位分析系统性能瓶颈,并进行调优。

但是,这并不意味着对于那些不想进大厂或者限于学历暂时无法进入大厂的人学习性能测试就没有意义了。

相反,我觉得很有意义,首先,做性能测试有利于你更好的理解系统架构以及整个链路数据的流转调用情况,从而加深你对业务的理解,更好的进行手工业务测试。

其次,学好性能测试对于你跳槽找工作面试来说是一大利器。之前不止一次提过,对于想拿高薪或者想进大厂的同学来说,其实就是看你编程,自动化,性能这几块掌握的怎么样。

至于其它工具使用,测试思维说实话都比较虚,也比较基础,没什么亮点。

那么接下来详细聊聊如何定位分析性能瓶颈,并调优呢?首先,说一下相对专业一些的性能测试在压测之前一般是怎么做的?

压测之前,一般会先对各个数据流转系统做好监控,比如服务器硬件资源cpu,磁盘,网络,io以及数据库服务器,数据库连接数,是否有sql慢查询,包括线程状态,JVM,中间件redis,nginx等等做监控。

关于如何做监控就看公司性能测试这块投入成本和建设的怎么样了,比如有的公司有自己的监控平台,可以同时监控很多东西。

像一些规模不大的团队简陋一点的可以借助于现有的开源平台和工具做监控。

比如Grafana+Prometheus可以监控服务器操作系统资源和数据库。jvisualvm可以监控JVM和线程状态,包括线程阻塞,死锁等等。nmon可以监控linux服务器,cpu,磁盘,内存,网络等。

除了这些工具还可以使用一些命令来做一些简单监控,比如监控cpu可以用top命令,内存用free命令等。监控中间件redis可以用info命令,监控nginx连接数使用netstat命令等等。

为什么讲性能瓶颈分析之前要先讲监控呢?

原因很简单,监控就像是人的眼睛一样,或者说就像是做手工测试时定位分析bug需要先去看日志报什么错一样,那么一通百通,性能测试问题瓶颈定位分析也是如此。遇到问题需要结合监控来看。

下面列几个经常遇到的性能测试问题定位分析思路,抛转引玉~

一.TPS压上不去什么原因,怎么排查?

这个原因比较多,压测整个链路上任何一个环节有瓶颈或者问题都有可能导致

1、首先是压力机压力不够,比如用我们笔记本基本压不到那么高TPS, 所以我们公司有自己的压测平台,分布式集群压测。

2、网络带宽,单位时间内网络传输数据量过大,超过带宽处理能力

3、数据库连接数太少,最大连接数不够

4、Cpu,内存,磁盘硬件资源达到瓶颈

5、中间件redis也有可能存在瓶颈比如缓存穿透,缓存过期等等

6、存在大量线程阻塞,线程死锁等

7、中间件消息队列拥堵

这个定位分析方法其实就是结合监控一个一个去排查,查看究竟哪条链路有问题,这也是性能测试比较复杂或者难的地方,需要你对每一个组件和链路都懂,然后还需要大量经验积累,才能在最短的时间内找到问题所在。

二.响应时间过长,什么原因怎么分析?

一般响应时间过长有下面几个原因:

1、服务器硬件资源cpu,内存,磁盘达到瓶颈,可以使用监控命令排查

2、网络问题导致,比如丢包,带宽不够等等

3、线程出现死锁,阻塞等问题可以用jstack查看

4、中间件比如mq消息队列拥堵排队等

5、数据库层面sql不够优化,没有索引,联合索引失效等,数据库连接数不够。

关于响应时间这个问题定位分析,我们还可以使用jprofiler工具去统计每个方法耗费时间定位到代码级别

三.压测过程中cpu过高或者飙升如何定位分析?

  • 使用了复杂的算法,比如加密,解密。
  • 压缩,解压,序列化操作。序列化可以把Gson组件换成fastjson提升 性能
  • 代码bug,死循环。

下面是定位分析过程,尽量定位到代码级别再去开发看问题。

  1. 查找进程,使用top命令进行排序查找出占用cpu最高的java进程
  2. 根据进程查找对应线程,使用top-H –p查看线程占用情况
  3. 使用jstack命令查询线程堆栈信息,定位到代码级别,Jstack|grep –a 线程id

以上,就是性能测试瓶颈分析的一些定位思路,供大家参考。

在这里插入图片描述

最后: 可以关注公众号:伤心的辣条 ! 进去有许多资料共享!资料都是面试时面试官必问的知识点,也包括了很多测试行业常见知识,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!喜欢我们自动化的小伙伴们,可以加入我们的技术交流扣扣群:914172719(里面有超多学习资料免费分享哟)


好文推荐

转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

什么样的人适合从事软件测试工作?

那个准点下班的人,比我先升职了…

测试岗反复跳槽,跳着跳着就跳没了…

Logo

开源、云原生的融合云平台

更多推荐