DEBUG -- CLOSE BY CLIENT STACK TRACE

来源:互联网 发布:什么是网络通信软件 编辑:程序博客网 时间:2024/06/06 17:54

第一次写博文,完全是属于菜鸟级别,写的不好之处还望各路大神多多指教,小子感激不尽。

最经开发一个项目使用了C3P0数据库连接池,发现了有这样一个Exception:

java.lang.Exception: DEBUG -- CLOSE BY CLIENT STACK TRACE
at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:646)
at com.mchange.v2.c3p0.impl.NewPooledConnection.closeMaybeCheckedOut(NewPooledConnection.java:259)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.destroyResource(C3P0PooledConnectionPool.java:619)
at com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask.run(BasicResourcePool.java:1024)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:648)

网上查了很多资料,差不不多都是说这个错误错误不会影响C3PO的使用,最简单的方法时提高日志输出级别,我自己用的log4j,把日子输出级别从DEBUG提到INFO级别就可以了。这样是能够解决问题,但是在开发当中自己定义的那些logger.debug信息也一样无法显示了。

网上也有很多分析原因的文章和解决方法,如http://hi.baidu.com/xhr8334/item/7e5a6f5326aa02d5d48bacca

但貌似都不适合我自己的这个项目。后来我尝试修改一些C3P0de配置常数,发现这个异常就消失了,

就是maxIdleTime的值设的稍微大一些,如:<property name="maxIdleTime" value="3600"></property>

这个是指最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。默认值为 0

同时为了减轻连接池的负载,比如连接池中连接数因为某次数据访问高峰导致创建了很多数据连接  
但是后面的时间段需要的数据库连接数很少,则此时连接池完全没有必要维护那么多的连接,所以有必要将  
断开丢弃掉一些连接来减轻负载,必须小于maxIdleTime。配置不为0,则会将连接池中的连接数量保持到minPoolSize。

还可以设置<property name="maxIdleTimeExcessConnections" value="1800"/>(该设置和上述异常无关,即不设置也不会抛出上述异常)

原理不是非常清楚,也不敢夸大其词。希望能对各位朋友有用。


0 0
原创粉丝点击