使用druid连接池的超时回收机制排查连接泄露问题

简介:

在工程中使用了druid连接池,运行一段时间后系统出现异常:

 


 
  1. Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60009, active 50  
  2.                 at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)  
  3.                 at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:280)  
  4.                 ... 64 more  
  5. Caused by: com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60000, active 50  
  6.                 at com.alibaba.druid.pool.DruidDataSource.getConnectionInternal(DruidDataSource.java:1071)  
  7.                 at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:898)  
  8.                 at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:4544)  


mysql数据库最大连接数设置为500,使用客户端能正常连接。连接数被未被占满。

 

 

分析原因应该是程序中有地方连接未关闭造成的。那如何来定呢?使用druid连接池的超时回收机制,在配置中增加以下内容:

 


 
  1. <!-- 超过时间限制是否回收 -->  
  2. <property name="removeAbandoned" value="true" />  
  3. <!-- 超时时间;单位为秒。180秒=3分钟 -->  
  4. <property name="removeAbandonedTimeout" value="180" />  
  5. <!-- 关闭abanded连接时输出错误日志 -->  
  6. <property name="logAbandoned" value="true" />     


运行程序,当连接超过3分钟后会强制进行回收,并输出异常日志。

 

 


 
  1. 2014-10-13 16:02:28,919 ERROR [com.alibaba.druid.pool.DruidDataSource] - <abandon connection, open stackTrace  
  2.         at java.lang.Thread.getStackTrace(Thread.java:1567)  
  3.         at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:995)  
  4.         at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:4544)  
  5.         at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java:661)  
  6.         at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:4540)  
  7.         at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:919)  
  8.         at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:911)  
  9.         at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:98)  
  10.           
  11.         at cn.org.xxx.xxx.xxx.PaginationInterceptor.intercept(PaginationInterceptor.java:96)  
  12.           
  13.         at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:60)  
  14.         at com.sun.proxy.$Proxy59.query(Unknown Source)  
  15.         at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:108)  

 


很清楚地看到是在哪里打开的连接未关闭一直在占有。

 

 

此配置项会影响性能,只在排查的时候打开。系统运行时最好关闭。

标签:  JAVA连接池

本文转自 netcorner 博客园博客,原文链接:http://www.cnblogs.com/netcorner/p/4380949.html    ,如需转载请自行联系原作者

相关文章
|
Arthas druid Java
一次druid数据库连接池连接泄露的排查分析
一次druid数据库连接池连接泄露的排查分析
2211 1
|
druid 数据库
几行代码轻松复现druid连接泄露的BUG之keepalive
几行代码轻松复现druid连接泄露的BUG之keepalive
1444 6
|
监控 druid Java
监控druid数据库连接池连接泄露的思路
监控druid数据库连接池连接泄露的思路
1745 2
|
Kubernetes Java 调度
Java 应用程序在 Kubernetes 上棘手的内存管理(下)
Java 应用程序在 Kubernetes 上棘手的内存管理
1207 0
|
druid Java
一次 Druid 连接池泄露引发的血案!
www.javastack.cn 优秀的Java技术公众号
一次 Druid 连接池泄露引发的血案!
|
SQL Prometheus 监控
数据库连接池选型 Druid vs HikariCP
springboot 现在官方默认的数据库连接池是 HikariCP,HikariCP的性能从测试的数据上来看也是最高的。
数据库连接池选型 Druid vs HikariCP
|
SQL Web App开发 Java
java.sql.SQLException: Unsupported character encoding 'utf8mb4'.
版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢。 https://blog.csdn.net/testcs_dn/article/details/76199827 四月 12, 2017 3:47:52 下午 org.
5030 0
|
8月前
|
存储 Java Maven
Maven系统级别依赖:解决部署时Jar包缺失问题
以上就是关于Maven系统级别依赖解决部署时Jar包缺失问题的解答,希望对你有所帮助。在软件开发中,遇到问题并解决问题是常态,希望你能够善用这些工具,解决你遇到的问题。
543 28
|
11月前
|
SQL 监控 druid
Java Druid 面试题
Java Druid 连接池相关基础面试题
229 2
|
SQL druid Java
解决 ‘The last packet successfully received from the server was xxx milliseconds ago‘ 问题
解决 ‘The last packet successfully received from the server was xxx milliseconds ago‘ 问题
7627 0