collection is close

http://www.iteye.com/topic/14474
经测试,将maxActive和maxIdle设为100/30,能承载更大的压力(需要更大的并发数才重现这个问题)。把它们设成3/3或更小,就极容易重现。

经查资料,(一)的出现是因为代码中出现这种情况:从jndi获得数据库连接,没有在使用完返还数据库(调用close方法)。
经上设置,这样的连接,在经过removeAbandonedTimeout这个超时时间后,dbcp会自动回收,并把申请该资源时的调用栈信息log出来。
(根据其log的stacktrace查代码,发现俺们数据库连接都规规矩矩的关掉了)

但是,依照我的log信息,似乎这样解释(又有想不通的地方):
并发数达到maxActive值的时候,再提交请求,就会log出(一),并返回一个连接,但这个连接.isClosed()是true,不能拿来用(faint!)
于是就出现了(二)的异常。 总结一下,(一)处是log信息,可以通过logAbandoned设为false禁止。(二)处为异常。
查看hibernate关于dbcp的配置,有:
引用
#当连接池中的连接已经被耗尽的时候,DBCP将怎样处理( 0 = 失败, 1 = 等待, 2= 增长)
hibernate.dbcp.whenExhaustedAction 1
而dbcp的官方文档没有whenExhaustedAction这一配置项。又见有人说hibernate的dbcp和apache commons的dbcp不大一样,俺不清楚。
我们系统没有用到hibernate.
总结:
通过配置dbcp,可以提高稳定性。
问题:
DBCP在超maxActive后到底是什么行为?
如何通过系统配置进一步提高稳定性?
如何处理上述怪现象?


http://topic.csdn.net/u/20090206/23/fcb94d20-c996-4e00-9951-966a509c849d.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值