01 硬件上的性能瓶颈
指的是CPU、内存、I/O读写速率,磁盘空间方面的问题。
02 网络上的性能瓶颈
指的网络带宽,网络波动,延时,丢包等。
03 应用程序上的性能瓶颈
指的是开发人员新开发出来的应用程序。
04 数据库的性能瓶颈
指的是数据库索引,锁,表空间,慢sql,数据量等影响。
05 中间件的性能瓶颈
比如:超时设置,线程池设置,缓存策略,最大连接数,负载均衡策略等等。
常 见 问 题
一、容量(压力)测试过程中cpu过高
这个要考虑压了多少用户
结果:cpu却到了80%多,指标是不能超过60%。
解决思路:如果是cpu过高,先把消耗cpu最多的进程找出来(top命令),再找到该线程下消耗cpu过高的是哪几个线程,再把该线程处理掉
二、内存溢出(堆溢出、栈溢出、持久代溢出)
解决思路:1、调整堆内存参数,一般是增加堆内存
2、减少批处理数据量
三、线程死锁:容量(压力)测试压测一段时间后,报连接超时
解决思路:
1、造成这种现象的原因很多,比如带宽不够,中间件线程池不够用,数据库连接池不够,连接数占满等都会造成连接不上而报超时 错误
2、找到死锁的线程,分析对应的代码
四、数据库死锁
解决思路:
1、造成这种现象的原因很多,比如带宽不够,中间件线程池不够用,数据库连接池不够,连接数占满等都会造成连接不上而报超时错误。
2、(重点)数据库日志中搜索block,能搜到block的话就是存在数据库死锁,找到日志,查看对应的sql,优化造成死锁的sql。
五、数据库连接池不释放
去mysql数据库查看应用程序到数据库的连接有多少个。
通过命令:
show variables like ‘%max_connections%’; 查询设置的最大连接数;
show status like 'Threads%'查询当前的连接数是多少
show processlist/show full processlist;
如果当前连接数大于等于最大连接数,说明数据库连接池被占满,需要把最大连接数修改大一点。
通过日志分析或者查看代码,数据库连接部分是不是有创建连接但是没有关闭连接的情况。基本就是这种情况导致的,修改代码即可。
六、压力测试中TPS一直上不去
1、网络带宽
分析思路:
在压力测试中,有时候要模拟大量的用户请求,如果单位时间内传递的数据包过大,超过了带宽的传输能力,那么就会造成网络资源竞争,间接导致服务端接收到的请求数达不到服务端的处理能力上限。
2、连接池
可用的连接数太少,造成请求等待。连接池一般分为服务器连接池(比如Tomcat)和数据库连接池(或者理解为最大允许连接数也行)。
3、数据库配置
高并发情况下,如果请求数据需要写入数据库,且需要写入多个表的时候,如果数据库的最大连接数不够,或者写入数据的SQL没有索引没有绑定变量,抑或没有主从分离、读写分离等,就会导致数据库事务处理过慢,影响到TPS。
4、硬件资源
包括CPU(配置、使用率等)、内存(占用率等)、磁盘(I/O、页交换等)。
5、业务逻辑
业务解耦度较低,较为复杂,整个事务处理线被拉长导致的问题。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!