日期:2014-05-19  浏览次数:20846 次

关于连接池的问题
各位高手,小弟不才碰到到一个问题,没有自己去测试过,希望大家指点一二,我再做测试。
问题描述:TOMCAT作为服务器,JSP+Servlet的一个系统(小系统没用什么框架),然后数据库连接使用连接池,数据库连接的是远程的。系统部署上服务器能正常运行。系统的访问量没有那么夸张,TOMCAT足以能承受。
1.但是20分钟后,系统便连接不上数据库。
2.再过一段时间,系统又能够正常运行。
3.连接不上之后,重启服务器又能够连接上。
问题猜想:
1.数据的问题,因为是远程,可能是什么设置问题
2.数据库连接池的问题,可能是数据库连接池有的连接一直保持连接,导致连接超时。
网上查阅资料:
1.TOMCAT数据源配置时,确定重连时间。
2.改进数据库连接池。
(注:由于小弟也没有代码,所以也只是猜想,希望各位高手空闲之余帮忙分析分析,以助长小弟知识,同时也感谢各位在无码的情况下与小弟讨论此问题。)
tomcat 数据库 连接池 数据库连接池 服务器

------解决方案--------------------
有可能你servlet的一些数据库连接没有释放,导致连接数超过限制,配置连接池时,连接超时时间一般为60s,连接数200-500;
------解决方案--------------------
如果楼主的连接池用spring这样的容器管理,并且数据库连接长时间丢失的话,如果没有刷新spring容器内的连接池链接的机制,确实只能重启tomcat解决,我上个项目就有这样的问题。所以我觉得需要在有个一个spring的bean或后台线程定时检查并刷新连接池的状态,该重新连接就重新连接。当然,有些连接池有这样的机制,比如c3p0,但是它的方式是频繁执行测试sql,会大量占用数据库链接,厉害的能直接导致数据库连接被撑爆。
------解决方案--------------------
觉得可能是数据库的连接没有释放
------解决方案--------------------
你可以自定义一个连接池实现connection接口,重写close的方法。或者你把你的conn做成单例每次使用的时候检测当前的conn是否关闭和是否有效再做其他操作。
------解决方案--------------------
1.但是20分钟后,系统便连接不上数据库。
连接不上后,有没有查过数据库的连接数(想办法),是不是饱和了

2.再过一段时间,系统又能够正常运行。
这段时间大概多久,是不是每次都差不多时间

3.连接不上之后,重启服务器又能够连接上。
这个证明和数据库本身可能没什么关联,多半是连接数饱和的缘故