连接无法释放导致的程序问题解决

        今天在发布了一个应用程序的新版本后,出现了操作一段时间以后页面便死在那里无法操作,点击新的链接无反应,但点击已操作过的链接时却可以显示页面。程序框架为Srping+hibernate+struts。初步判断是否是无法从数据库连接池获得可用连接,所以在连接池满了以后新的操作便由于无法获得数据库连接而等待,表现为页面无法操作。查看后台日志没有报无法获得连接的错误。用netstat看网络连接情况,发现mysql的连接很多,但好像没有达到连接池上限。重启应用后用netstat观察,发现mysql连接增长很快,到了某一个数量的时候,程序便无法操作了。为了对比,恢复了老版本的应用,同样用netstat观察连接,发现mysql连接增长缓慢。由对比判断,是有程序没有释放mysql连接,导致连接池满。查看应用配置文件,发现把service的层的事务处理的拦截器给注释掉了,重新开放后问题解决。由此判断,应该是事务没有提交,导致连接一直占用,没有返还到连接池。
        由于这个DataSource使用的是c3p0的连接池,上网查了一下,发现c3p0有连接管理的问题,猜想大概是因为这个导致程序的问题的。网上说使用dbcp不会有这样的问题,dbcp的连接管理比较好一点。目前没有深究,有空的话可以做些实验,比较一下常用的几个连接池的效果。(c3p0,dbcp,spring datasource)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值