Caused by: java.sql.SQLException: An attempt by a client to checkout a Connection has timed out

当并发量大的时候,C3P0连接池会出现如下异常信息:

[java]  view plain  copy
  1. Caused by: java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.  
  2. at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106)  
  3. at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:65)  
  4. at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:527)  
  5. at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)  
  6. at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:113)  
  7. at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)  
  8. ... 5 more  
  9. Caused by: com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from -- timeout at awaitAvailable()  
  10. at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1317)  
  11. at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557)  
  12. at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477)  
  13. at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525)  
  14. ... 8 more  

对于这部分的异常分析如下:

网上很多说是C3P0的bug问题。c3p0在同时关闭statement和connection的时候,或者关闭他们之间的时间很短的时候,有时候connection并没有被关闭,因为有些preparedstatement还在被cached住。这样就会有很多connection并没有真正的被关闭,连接池的连接都给耗尽了,就会产生上面的异常。解决的方案就是把缓存关闭也就是把c3p0.max_statements 设置成0,这样就不会有缓存的preparedstatement,而设置的c3p0.idle_test_period又小于c3p0.timeout,这样的设置应该没有什么问题了。

回头有时间的话,再拜读下源码研究下,目前先这么解决即可.


以上转载   jmeter  200线程 10轮压测 可以,再高300线程 压还会报出这个错误

ps :这个办法只能缓解  并发再高的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值