性能测试常见瓶颈分析及调优方法

性能出现的问题总结如下:

1、TPS波动较大

  • 原因解析:出现TPS波动较大问题的原因一般有网络波动其他服务资源竞争以及垃圾回收问题这三种。
  • 性能测试环境一般都是在内网或者压测机和服务在同一网段,可通过监控网络的出入流量来排查;
  • 其他服务资源竞争也可能造成这一问题,可以通过Top命令或服务梳理方式来排查在压测时是否有其他服务运行导致资源竞争;
  • 垃圾回收问题相对来说是最常见的导致TPS波动的一种原因,可以通过GC监控命令来排查,命令如下:
# 实时打印到屏幕
jstat -gc PID 300 10
jstat -gcutil PID 300 10


# GC信息输出到文件 
jstat -gc PID 1000 120 >>/path/gc.txt
jstat -gcutil PID 1000 120 >>/path/gc.txt
  • 调优方案
  • 网络波动问题,可以让运维同事协助解决(比如切换网段或选择内网压测),或者等到网络较为稳定时候进行压测验证;
  • 资源竞争问题:通过命令监控和服务梳理,找出压测时正在运行的其他服务,通过沟通协调停止该服务(或者换个没资源竞争的服务节点重新压测也可以);
  • 垃圾回收问题:通过GC文件分析,如果发现有频繁的FGC,可以通过修改JVM的堆内存参数Xmx,然后再次压测验证(Xmx最大值不要超过服务节点内存的50%!)

2、高并发下大量报错

  • 原因解析:出现该类问题,常见的原因有短连接导致的端口被完全占用以及线程池最大线程数配置较小超时时间较短导致。
  • 调优方案
  1. 短连接问题:修改服务节点的tcp_tw_reuse参数为1,释放TIME_WAIT scoket用于新连接;
  2. 线程池问题:修改服务节点中容器的server.xml文件中的配置参数,主要修改如下几个参数:
# 最大线程数,即服务端可以同时响应处理的最大请求数 
maxThreads="200" 
# Tomcat的最大连接线程数,即超过设定的阈值,Tomcat会关闭不再需要的socket线程        
maxSpareThreads="200" 
# 所有可用线程耗尽时,可放在请求等待队列中的请求数,超过该阈值的请求将不予处理,返回Connection refused错误 
acceptCount="200" 
# 等待超时的阈值,单位为毫秒,设置为0时表示永不超时 
connectionTimeout="20000" 

3、集群类系统,各服务节点负载不均衡

  • 原因解析:出现这类问题的原因一般是SLB服务设置了会话保持,会导致请求只分发到其中一个节点。
  • 调优方案:如果确认是如上原因,可通过修改SLB服务(F5/HA/Nginx)的会话保持参数为None,然后再次压测验证;

4、并发数不断增加,TPS上不去,CPU使用率较低

  • 原因解析:出现该类问题,常见的原因有:SQL没有创建索引/SQL语句筛选条件不明确、代码中设有同步锁,高并发时出现锁等待;
  • 调优方案
  1. SQL问题:没有索引就创建索引,SQL语句筛选条件不明确就优化SQL和业务逻辑;
  2. 同步锁问题:是否去掉同步锁,有时候不仅仅是技术问题,还涉及到业务逻辑的各种判断,是否去掉同步锁,建议和开发产品同事沟通确认;

5、压测过程中TPS不断下降,CPU使用率不断降低

  • 原因解析:一般来说,出现这种问题的原因是因为线程block导致,当然不排除其他可能;
  • 调优方案:如果是线程阻塞问题,修改线程策略,然后重新验证即可;

6、其他

  • 除了上述的五种常见性能瓶颈,还有其他,比如:connection reset、服务重启、timeout等,当然,分析定位后,你会发现,我们常见的性能瓶颈,导致其的原因大多都是因为参数配置、服务策略、阻塞及各种锁导致。。。
  • 性能瓶颈分析参考准则:从上至下、从局部到整体!

PS : 以上分析及调优方案仅供参考,具体定位还需要根据日志监控等手段来分析调优。。。

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

依剑仗天涯

你的鼓励是我创装的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值