Gavin_Yi

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

最近公司一个JDK1.4的老项目升级了JDK1.6后BUG不断,最可恶的连接池被占满。

因为是使用tomcat的连接池所以在config下中添加

<Resource name="jdbc/****" auth="Container" 
type="javax.sql.DataSource" 
username="****" 
password="*****" 
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
url="jdbc:sqlserver://*******" 
maxActive="200" 
maxIdle="50" 
maxWait="600000"

logAbandoned="true"
removeAbandoned="true" 
removeAbandonedTimeout="600"

/>

这样tomcat会打印出未关闭的数据库连接的代码块。

logAbandoned="true"
是开启打印回收连接日志
removeAbandonedTimeout="600"
是设置连接超时时间,注意单位是秒
removeAbandoned="true" 
是数据库连接不够用回收超时的连接

通过tomcat打印的日志可以找到未关闭连接的代码块
org.apache.tomcat.dbcp.dbcp.AbandonedTrace$AbandonedObjectException: DBCP object
 created 2016-10-10 11:01:47 by the following code was never closed:
        at org.apache.tomcat.dbcp.dbcp.AbandonedTrace.init(AbandonedTrace.java:9
0)
        at org.apache.tomcat.dbcp.dbcp.AbandonedTrace.<init>(AbandonedTrace.java
:73)
        at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.<init>(DelegatingResu
ltSet.java:81)
        at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.wrapResultSet(Delegat
ingResultSet.java:104)
        at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeQuery(Delegati
ngStatement.java:208)
        at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeQuery(Delegati
ngStatement.java:208)
        at org.apache.jsp.*****************.appformlist_jsp._jspService(ap
pformlist_jsp.java:1317)

 从上可以看到appformlist_jsp的1317行没有关闭

 利用反编译工具找到tomcat的work目录下的appformlist_jsp.class

关闭这位置数据库连接。

posted on 2016-12-29 14:44  Gavin_Yi  阅读(382)  评论(0编辑  收藏  举报