性能问题分析调优案例

98 篇文章 3 订阅
36 篇文章 5 订阅

案例背景

压测业务:某接口
压测工具:Jmeter
场景设置:100秒内逐步加压20个并发线程,场景总时长5分钟
压测环境:linux + tomcat 8.5
问题描述:随着并发压力的增加,TPS保持不变,此时服务器的各项资源指标未达到饱和状态

性能问题分析调优案例第16篇
从上图可以看出,虽然此次压测只用了20并发,但是当并发线程达到10个左右时,TPS几乎就已经持平了

平均响应时间图
性能问题分析调优案例第16篇

分析过程

首先,先看下系统的硬件资源
性能问题分析调优案例第16篇
应用服务器CPU使用率

性能问题分析调优案例第16篇
数据库服务器CPU使用率

总体上应用和数据库服务器的各项资源都还处于正常水平,包括CPU、内存、IO、网络等等。

接着,查看数据库的TOP SQL,也没发现可疑的目标,而且一般数据库TOP SQL有问题的话,在数据库的CPU和IO使用率上也会体现出来。

到这里,还未查到什么可疑的问题。

一般,如果硬件资源、网络和带宽、数据库TOP SQL都找不到问题的话,那么就应该查查应用服务了。

在TPS达到瓶颈后,通过jstack得到线程快照,多打几次。

分析线程快照,发现业务线程中有一半处于运行中状态(主要是等待数据库返回结果),但是还有一半处于以下状态:
性能问题分析调优案例第16篇
这些线程在等待取得数据库连接。。。

本压测场景只用了20并发,数据库连接池配置max Active=50,怎么还会有这么多线程在等待数据库连接?

莫非是数据库连接池配置没有生效?

于是,从其他方面再次进行验证,比如操作系统层面通过如下命令
性能问题分析调优案例第16篇
可以看到该服务进程和数据库之间的连接数确实只有8个。

跟开发了解得知,此服务用的数据库连接池是dbcp2,上网搜索资料,发现它的默认最大连接数确实就是8个。
性能问题分析调优案例第16篇

但是配置文件可以肯定已经将它调整为50了,为什么它最大还是只有8个?

继续搜索相关资料,有人提到由于commons-dbcp所用的连接池出现版本升级,因此commons-dbcp2中的数据库池连接配置也发生了变化,具体的参数配置说明如下:

性能问题分析调优案例第16篇
可以看到新版本的最大连接数配置参数已经由maxActive改成maxTotal了,真是坑啊~

于是让开发调整这个配置项参数,问题解决。

总结

  1. 遇到系统TPS上不去的时候,可以通过看线程信息和其他手段(如服务进程到数据库的连接数)确认是否数据库连接池数瓶颈导致;
  2. 很多公司的架构和开发人员,在配置一些系统关键参数时,往往都是从网上CTRL+C得来,但是这些配置信息随着版本的迭代更新,其实可能已经过时了,导致这些关键参数配置并未生效,而使得系统存在性能隐患;
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值