阿里数据库连接池druid详解,druid数据库连接池一直满

  阿里数据库连接池druid详解,druid数据库连接池一直满

  00-1010前言流程一:定位工作流流程二:定位JPA的OpenEntityManagerInviewenterceptor流程三:定位真凶Druid后记:

  00-1010事件起因:项目中使用了activiti工作流,系统是由旧的spring mvc项目改造而来的spring boot项目。数据库连接池从dbcp切换到druid。新系统上线后,同事的数据查询几次后都很慢,几乎出不去。

  这就开始了在线bug排查之路。这个问题从一开始就定位在数据库层面,因为只有数据相关的操作会比较慢,其他服务不会受影响,中午休息的时候也不会有问题,下午刚上班也不会出现。

  00-1010首先第一反应是看日志:日志一切正常,没有抛出异常信息。然后调整日志级别进行调试,发现了一些问题。中午休息时,日志不断输出jpa的连接信息,最后工作流的异步执行器在轮询。因为在spring引导环境下,spring . activiti . async-executor-activate=true默认为true,如果不需要可以设置为false,更改后情况不变。

  00-1010使用OpenEntityManagerInviewenterceptor后,服务器在收到请求时启动EntityManager,并在请求结束时关闭它。所以在用户多,高并发,操作耗时的情况下,数据连接会不足,我们的业务就有这个特点。

  在spring boot环境中,OpenEntityManagerInviewenterceptor在默认情况下是打开的。然而,在我们用spring.jpa.open-in-view=false关闭它之后,问题依然存在,只是用的时间比以前长了一点。

  00-1010使用top定位程序pid,然后使用jstack -l 2591 dump.out获取当前堆栈的快照并找到以下内容

  http-nio-8080-exec-54 daemon prio=10 tid=0x 0000000000 e 61000 NID=0x cc 9 WAITING on condition[0x 00007 f4a 753d 4000]Java . lang . thread . state : WAITING(parking)At sun . misc . unsafe . park(Native Method)-park to WAITING0x 00000007 a 143 f 230(a Java . util . locks . abstractqueuedsynchronizerconditionAlibaba . druid . filter . filterchainimpl . data source _ connect(filterchainimpl . Java 33604619)所有请求都被druid的连接操作阻塞。最后,看看源代码,如下所示

  因为数据链接没有被释放,连接池中没有可用的连接,导致请求被阻塞。

  这里基本就是这个道理。最后改成了spring boot自带的连接池tomcat jdbc,一切正常。

  10月10-1010,定位问题后,发现网上很多人都遇到了连接泄露。可以看出德鲁伊的官方问题,比如https://github.com/alibaba/druid/issues/1160.

  然而,德鲁伊也提供了相应的方案,如下

  虽然官方说可能是应用本身原因导致连接不释放,连接泄露,但是为什么切换了另一家的连接池之后就什么事都没有了呢?方圆,你怎么看?

  以上是阿里德鲁伊数据连接池引起的在线异常解决细节。更多关于Druid数据连接池在线异常的信息,请关注盛行IT的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 关系型数据库与非关系型数据库简介一样吗,关系型数据库非关系型数据库有哪些
  • 关系型数据库与非关系型数据库简介一样吗,关系型数据库非关系型数据库有哪些,关系型数据库与非关系型数据库简介
  • 关于redis数据库入门详细介绍图片,redis数据库的使用,关于Redis数据库入门详细介绍
  • 使用php连接mysql数据库,php连接数据库的方法
  • 使用php连接mysql数据库,php连接数据库的方法,一文详解PHP连接MySQL数据库的三种方式
  • 什么是分库分表,为什么要进行分库分表-,分库分表的区别,数据库分库分表是什么,什么情况下需要用分库分表
  • vb中adodb连接数据库,
  • treeview控件绑定数据,wpf treeview数据绑定,详解TreeView绑定数据库
  • sql的多表查询,数据库如何实现多表查询
  • SQL数据库的图形管理界面工具是,sql图形界面创建数据库
  • SQL数据库的图形管理界面工具是,sql图形界面创建数据库,SQLServer2019 数据库的基本使用之图形化界面操作的实现
  • sql数据库定时备份怎么弄,mysql 定期备份
  • sql数据库定时备份怎么弄,mysql 定期备份,MySQL 数据库定时备份的几种方式(全面)
  • sqlserver的nvarchar和varchar,数据库varchar和nvarchar
  • sqlserver的nvarchar和varchar,数据库varchar和nvarchar,SQL中varchar和nvarchar的基本介绍及其区别
  • 留言与评论(共有 条评论)
       
    验证码: