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