近期某一程序运行总是卡,必须重新启动才可以解决困难,造成被各种各样举报,清查难题是 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、后端开发、构架、阿里巴巴网等大型厂最新消息面试问题
衣食住行很幸福,很高兴认识你~
Copyright © 2004-2024 Ynicp.com 版权所有 法律顾问:建纬(昆明)律师事务所 昆明市网翼通科技有限公司 滇ICP备08002592号-4