故障现象
使用 weblogic 数据源,系统运行一段时间后,数据源连接池达到最大,可用连接数为0,无法连接数据库。应用报错。
分析过程
这是明显的数据库连接泄漏问题,首先进入weblogic 控制台,打开左侧菜单, 配置连接池:
主页 >JDBC 数据源概要 >[JDBC Data Source-0],进入连接池页面,在高级中修改“非活动连接超时(Inactive Connection
Timeout)”值为 60。保存weblogic 配置生效,查看weblogic 的server 日志有如下
<2015-10-8 下午 10 时21 分29
秒 GMT+08:00>
001153>
o the connection pool "rlsds", currently reserved by: java.lang.
Exception
at weblogic.jdbc.common.internal.ConnectionEnv. setup(ConnectionEnv.java:325)
at weblogic.common.resourcepool.ResourcePoolImpl.reserveR esource(ResourcePoolImpl.java:363)
…………
at SmartPool.plugin.WebLogicConUtil. getConnection(WebLogicConUtil.java:91)
…………
此段信息说明weblogic强制回收了数据库连接,通过打印出的堆栈信息,可以找到建立连接的信息,通过提示信息查找代码中的bug。
解决方案
1、修改连接池的“非活动连接超时(Inactive Connection Timeout)”,值设为 60(默认为 0, 即不启用)。
2、根据日志打印的堆栈信息,修改代码中的 bug。