数据库空闲连接超过最大wai_timemout时间,数据库会强行断开空闲的链接,dbcp解决方案
来源:互联网 发布:洲际导弹拦截知乎 编辑:程序博客网 时间:2024/05/20 00:39
虚拟空间的mysql数据库常设得很低,如wait_timeout=100,在java web 应用中使用dbcp做为连接池,当数据库重启或数据库连接超过设置的最大timemout时间,数据库会强行断开已有的链接,此时当web程序访问数据库时就会出现错误,大致的错误信息java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost,原因是数据库这边已有的连接强行断开,而连接池中不知道已经断开,还是从连接池取出数据库连接交给程序去执行数据库操作,所以导致出错。且我们无法修改配置,这时只能在dbcp连接池上做一些配置。
解决原理:
在构造GenericObjectPool [BasicDataSource在其createDataSource () 方法中也会使用GenericObjectPool]时,会生成一个内嵌类Evictor,实现自Runnable接口。如果timeBetweenEvictionRunsMillis大于0,每过 timeBetweenEvictionRunsMillis毫秒Evictor会调用evict()方法,检查连接池中的连接的闲置时间是否大于 minEvictableIdleTimeMillis毫秒(_minEvictableIdleTimeMillis小于等于0时则忽略,默认为30分钟),是则销毁此对象,然后调用ensureMinIdle方法检查确保池中对象个数不小于_minIdle。如果连接池的连接数小于最小空闲连接数,则创建数据库连接,同时检查连接池的连接是否小于maxIdle,是则把刚创建的连接放入连接池中,否则销毁此对象。
参数说明timeBetweenEvictionRunsMillis (设置的Evict线程的时间,单位:毫秒,即每隔多少时间去检测一次空闲连接是否超时,默认值为-1,即不开启)
minEvictableIdleTimeMillis (空闲逐出连接池的时间,单位:毫秒,默认30分钟)
numTestsPerEvictionRun (设定在进行后台对象清理时,每次检查几个链接。默认值是3.
如果numTestsPerEvictionRun>=0, 则取numTestsPerEvictionRun 和池内的链接数 的较小值 作为每次检测的链接数
如果numTestsPerEvictionRun<0,则每次检查的链接数是检查时池内链接的总数乘以这个值的负倒数再向上取整的结果。)
举例:XX系统的数据库Mysql,dba设置的超时空闲失效时间是100秒(MYSQL如果不设置,默认的是8小时),未加以下参数之前经常报链接失效的错误,加上以下配置后,即可解决。timeBetweenEvictionRunsMillis=48 minEvictableIdleTimeMillis=90,因此当空闲连接在96秒的时候会被检查到超过90秒随后被逐出,然后则创建新的数据库连接。因此timeBetweenEvictionRunsMillis一定要小于100秒,否则检查不出失效连接,但这里也不能设置为51秒,因为第二次检测已经102秒,连接池连接在100秒时就已经与数据库断开!minEvictableIdleTimeMillis要小于100秒,即赶在失效前逐出。
- 数据库空闲连接超过最大wai_timemout时间,数据库会强行断开空闲的链接,dbcp解决方案
- mysql连接空闲8小时自动断开问题DBCP解决方案
- 由防火墙导致的数据库空闲连接断开问题
- 数据库会自动清除掉超时的空闲连接造成中间件连接池中连接断开的问题
- mysql数据库连接空闲超过8小时自动断开,项目无法连接数据库
- 数据库超时空闲失效-dbcp连接池参数优化
- 数据库超时空闲失效-dbcp连接池参数优化
- C3P0连接池配置解决MySQL连接的空闲时间超过8小时后自动断开连接的问题
- 在Oracle数据库实现自动断开空闲连接
- MySQL+Hibernate连接空闲超过8小时后自动断开解决方案
- MySQL+Hibernate连接空闲超过8小时后自动断开解决方案
- 强行断开指定数据库的所有连接
- MAC终端ssh连接服务器,空闲时间自动断开连接
- MyBatis配置文件配置数据库的参数中 最大连接数和任意时间存在的空闲连接数不能为空
- plsql、dblink连接Oracle数据库长时间空闲后自动断开及远程终端连接linux空闲超时后自动断开问题
- 最大空闲连接数
- 修改weblogic的空闲连接时间
- mysql的8小时空闲,断开连接的问题
- X264参考手册
- 前端开发中IE6的问题的汇总
- 【黑马程序员】新的开始
- Unity3D 脚本支持中文
- SpringMVC Pojo类的Date类型应用问题
- 数据库空闲连接超过最大wai_timemout时间,数据库会强行断开空闲的链接,dbcp解决方案
- css透明度的设置 (兼容所有浏览器)
- Android操作系统11种传感器介绍
- 探寻“大数据驱动创新”的路径
- Hadoop Map/Reduce教程
- REST on Rails指南
- (go) 上传文件ta3 专用(无多级目录)
- java书籍推荐
- XML入门经典(第五版)