性能问题分析调优案例第16篇

案例背景

压测业务:某接口
压测工具: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得来,但是这些配置信息随着版本的迭代更新,其实可能已经过时了,导致这些关键参数配置并未生效,而使得系统存在性能隐患;
优秀的个人博客,低调大师

微信关注我们

原文链接:https://blog.51cto.com/14437683/2651781

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。