关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

Druid 数据库连接池泄漏引起的命案!

发布时间:2020-03-12 00:00:00

近期某一程序运行总是卡,必须重新启动才可以解决困难,造成被各种各样举报,清查难题是 Druid 数据库连接池泄漏引起的命案。

出现异常系统日志以下:

ERROR - com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60000, active 50, maxActive 50, creating 0
    at com.alibaba.druid.pool.DruidDataSource.getConnectionInternal(DruidDataSource.java:1512)
    at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1255)
    at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5007)
    at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java:680)
    at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5003)
    at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1233)
    at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1225)
    at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:90)

数据库连接池中的联接总数早已抵达最高值了,来到 60 秒还不可以建立联接就超日报不对。

难题很显著,毫无疑问是程序运行哪儿用了联接但沒有释放出来,全局性清查编码又较为艰辛,加了三个 Druid 数据库连接池配备项,最后精准定位并处理了难题。

加上下列配备:


这就是说联接泄漏配备项,假如联接长期不偿还,removeAbandoned 开启情况,超出 removeAbandonedTimeoutMillis 设定的请求超时時间,将会强制性收购联接。

数据库连接池复位时候起动一个进程,用以查验并收购联接。

参照源代码:

com.alibaba.druid.pool.DruidDataSource#createAndStartDestroyThread

logAbandoned 开启情况时,关掉联接另外会纪录那时候的堆栈系统日志,可用以精准定位到什么编码开启了联接没关掉。

abandon connection, owner thread: https-jsse-nio-4443-exec-9, connected at : 1573521883837, open stackTrace
    at java.lang.Thread.getStackTrace(Thread.java:1589)
    at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1305)
    at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:4619)
    at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java:680)
    at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:4615)
    at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1225)
    at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1217)
    at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:90)
    at org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:162)
    ...

这一配备项尽管可用以清查数据库连接池释放出来难题,但环境当心应用,假如有的业务流程实行事务管理的時间较为长,会被误收购,当心引起此外一个命案。

强烈推荐去我的网站阅读文章大量:

1.Java JVM、结合、c#多线程、新特点系列产品实例教程

2.Spring MVC、Spring Boot、Spring Cloud 系列产品实例教程

3.Maven、Git、Eclipse、Intellij IDEA 系列产品专用工具实例教程

4.Java、后端开发、构架、阿里巴巴网等大型厂最新消息面试问题

衣食住行很幸福,很高兴认识你~


/template/Home/Zkeys/PC/Static