关于连接池的问题

sgyyz 2013-01-14 10:55:29
各位高手,小弟不才碰到到一个问题,没有自己去测试过,希望大家指点一二,我再做测试。
问题描述:TOMCAT作为服务器,JSP+Servlet的一个系统(小系统没用什么框架),然后数据库连接使用连接池,数据库连接的是远程的。系统部署上服务器能正常运行。系统的访问量没有那么夸张,TOMCAT足以能承受。
1.但是20分钟后,系统便连接不上数据库。
2.再过一段时间,系统又能够正常运行。
3.连接不上之后,重启服务器又能够连接上。
问题猜想:
1.数据的问题,因为是远程,可能是什么设置问题
2.数据库连接池的问题,可能是数据库连接池有的连接一直保持连接,导致连接超时。
网上查阅资料:
1.TOMCAT数据源配置时,确定重连时间。
2.改进数据库连接池。
(注:由于小弟也没有代码,所以也只是猜想,希望各位高手空闲之余帮忙分析分析,以助长小弟知识,同时也感谢各位在无码的情况下与小弟讨论此问题。)
...全文
285 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dracularking 2013-01-17
  • 打赏
  • 举报
回复
1.但是20分钟后,系统便连接不上数据库。 连接不上后,有没有查过数据库的连接数(想办法),是不是饱和了 2.再过一段时间,系统又能够正常运行。 这段时间大概多久,是不是每次都差不多时间 3.连接不上之后,重启服务器又能够连接上。 这个证明和数据库本身可能没什么关联,多半是连接数饱和的缘故
sgyyz 2013-01-17
  • 打赏
  • 举报
回复
数据库服务器是远程的,这会有影响么?可不可能问题出在数据库方面呢?
sgyyz 2013-01-17
  • 打赏
  • 举报
回复
引用 12 楼 dracularking 的回复:
1.但是20分钟后,系统便连接不上数据库。 连接不上后,有没有查过数据库的连接数(想办法),是不是饱和了 2.再过一段时间,系统又能够正常运行。 这段时间大概多久,是不是每次都差不多时间 3.连接不上之后,重启服务器又能够连接上。 这个证明和数据库本身可能没什么关联,多半是连接数饱和的缘故
感谢,排除了数据库和连接数饱和的问题(因为只有一个用户访问,不存在饱和的问题)了!现在确定是连接池的问题了!我会去找一下他们连接池的代码,然后确定了原因回来给分!谢谢!
sgyyz 2013-01-16
  • 打赏
  • 举报
回复
引用 7 楼 tonyyl 的回复:
如果楼主的连接池用spring这样的容器管理,并且数据库连接长时间丢失的话,如果没有刷新spring容器内的连接池链接的机制,确实只能重启tomcat解决,我上个项目就有这样的问题。所以我觉得需要在有个一个spring的bean或后台线程定时检查并刷新连接池的状态,该重新连接就重新连接。当然,有些连接池有这样的机制,比如c3p0,但是它的方式是频繁执行测试sql,会大量占……
感谢,项目没有用到spring。就是单纯的jdbc的连接池。我觉得还是要看到源码说话好些。个人觉得,如果说是连接没被释放导致连接中断,为什么在1个小时以后,又能够连接了呢?
熊猫大虾 2013-01-15
  • 打赏
  • 举报
回复
引用 1 楼 whz137458 的回复:
有可能你servlet的一些数据库连接没有释放,导致连接数超过限制,配置连接池时,连接超时时间一般为60s,连接数200-500;
这个正解 <maximum-connection-count>10</maximum-connection-count> <minimum-connection-count>2</minimum-connection-count> <maximum-active-time>500000</maximum-active-time> 连接超时时间:maximum-active-time 可以设置大一点(这里是毫秒)
  • 打赏
  • 举报
回复
你可以自定义一个连接池实现connection接口,重写close的方法。或者你把你的conn做成单例每次使用的时候检测当前的conn是否关闭和是否有效再做其他操作。
brightyq 2013-01-15
  • 打赏
  • 举报
回复
帖数据库连接池配置出来
rome_wu 2013-01-15
  • 打赏
  • 举报
回复
有可能你servlet的一些数据库连接没有释放,导致连接数超过限制,配置连接池时,连接超时时间一般为60s,连接数200-500;
miliermili 2013-01-15
  • 打赏
  • 举报
回复
觉得可能是数据库的连接没有释放
  • 打赏
  • 举报
回复
如果楼主的连接池用spring这样的容器管理,并且数据库连接长时间丢失的话,如果没有刷新spring容器内的连接池链接的机制,确实只能重启tomcat解决,我上个项目就有这样的问题。所以我觉得需要在有个一个spring的bean或后台线程定时检查并刷新连接池的状态,该重新连接就重新连接。当然,有些连接池有这样的机制,比如c3p0,但是它的方式是频繁执行测试sql,会大量占用数据库链接,厉害的能直接导致数据库连接被撑爆。
sgyyz 2013-01-15
  • 打赏
  • 举报
回复
引用 3 楼 jianqiangking 的回复:
引用 1 楼 whz137458 的回复:有可能你servlet的一些数据库连接没有释放,导致连接数超过限制,配置连接池时,连接超时时间一般为60s,连接数200-500; 这个正解 <maximum-connection-count>10</maximum-connection-count> <minimum-connection-count>2</……
如果把连接超时设置大了,应该会出现连接资源的浪费吧。而且现在的情况是,断开了一段时间后他又能自动连接……
sgyyz 2013-01-15
  • 打赏
  • 举报
回复
引用 2 楼 brightyq 的回复:
帖数据库连接池配置出来
我也在找这个配置,我也一直在想配置是否出现问题。
sgyyz 2013-01-15
  • 打赏
  • 举报
回复
引用 1 楼 whz137458 的回复:
有可能你servlet的一些数据库连接没有释放,导致连接数超过限制,配置连接池时,连接超时时间一般为60s,连接数200-500;
检查过数据库连接,应该都是释放了的。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧