get/close not same thread Druid 连接池一个设置没设置对引发的血案
2014-12-18 11:41
471 查看
我就郁闷了,1000W+数据审核每次总是到一半就出这么个错,仔细找找原来是一个配置项的小问题,removeAbandonedTimeout 这个代表你从连接池取出一个连接多少秒之后你还没还回来,那就强制取回,所以就报这个错.
相关文章地址: http://my.oschina.net/haogrgr/blog/224010
今天在一台配置很低的机器上运行批量更新的程序~~~ 大概跑了三十分钟~~~这配置~~~这程序~~~ 然后华丽丽的报异常了~~~ 具体异常是这样的,
?
这个是最初的异常, 后面还有一大批异常,?
说什么holder为空 第一眼看到holder就像到Spring的源码, 里面到处是holder(笑) 但是这里的holder不是Spirng里面的,是Druid的 这个holder大概是用来hou住连接池里面的连接的. 然后为什么为空了呢? 目测是哪个链接坏了, 或者被意外的关闭了... 根据异常调源码 at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:942)?
看不出啥来. 只能将日志继续看看, 还是看不出啥来 然后看了上面代码几遍后, 老觉得 isRemoveAbandoned() 这个方法有鬼. 查看调用处,:
恩, 这个DestroyConnectionThread非常可疑, 跳?
继续?
擦, 这里不对头, timeMillis >= removeAbandonedTimeoutMillis timeMillis 这个是getConnection()被调用时的时间 意思就是一个连接被get后, 超过了 removeAbandonedTimeoutMillis这么久我就弄死你. 然后继续找removeAbandonedTimeoutMillis 这玩意在哪里设置的 ,最后发现是在 <property name="removeAbandoned" value="true" /> <property name="removeAbandonedTimeout" value="1800" /> 初始化配置的这里设置的, 这两个参数的大概意思就是, 通过datasource.getConnontion() 取得的连接必须在removeAbandonedTimeout这么多秒内调用close(),要不我就弄死你.(就是conn不能超过指定的租期)
然后调成2个小时~~~ 然后程序成功跑完~~~华丽丽的等了50分钟 总结: 连接池为了防止程序从池里取得连接后忘记归还的情况, 而提供了一些参数来设置一个租期, 使用这个可以在一定程度上防止连接泄漏 但是如果你的业务真要跑这么久~~~~那还是注意下这个设置.
相关文章地址: http://my.oschina.net/haogrgr/blog/224010
今天在一台配置很低的机器上运行批量更新的程序~~~ 大概跑了三十分钟~~~这配置~~~这程序~~~ 然后华丽丽的报异常了~~~ 具体异常是这样的,
?
恩, 这个DestroyConnectionThread非常可疑, 跳?
然后调成2个小时~~~ 然后程序成功跑完~~~华丽丽的等了50分钟 总结: 连接池为了防止程序从池里取得连接后忘记归还的情况, 而提供了一些参数来设置一个租期, 使用这个可以在一定程度上防止连接泄漏 但是如果你的业务真要跑这么久~~~~那还是注意下这个设置.
相关文章推荐
- 【转】Druid连接池一个设置引发的血案
- 摘要: Druid连接池一个设置引发的血案 -- 链接池出现问题
- Druid连接池一个设置引发的血案
- Druid连接池一个设置引发的血案
- blast2go本地安装,一个防火墙设置引发的血案
- 一个“Spring轮子”引发的“血案”(2)
- 一个“Sprng轮子”引发的“血案”(3)
- 一个“Sprng轮子”引发的“血案”(3)
- 一个“Spring轮子”引发的“血案”(4)
- 一个馒头引发的血案的精彩评论
- 一个“Spring轮子”引发的“血案”(4)
- 一个“Spring轮子”引发的血案(1)
- 一个PHP菜鸟与cms引发的血案
- 一个“Spring轮子”引发的“血案”(2)
- 一个“Spring轮子”引发的“血案”(2)
- 一个“Spring轮子”引发的“血案”(5)
- 一个“Spring轮子”引发的“血案”(4)
- 一个“Spring轮子”引发的“血案”(2)
- 馒头版《吉祥三宝》-一个馒头引发的血案
- 一个“Spring轮子”引发的“血案”(6)