码迷,mamicode.com
首页 > 数据库 > 详细

Hibernate MySql "Too Many Connection"错误解决方案

时间:2014-10-23 14:31:16      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:too many connection   hibernate   mysql   

用CXF+Hibernate+Spring+MySql做WebService项目,访问数据库一段时间后,一直出现“Too Many Connection”错误,然后数据库就不能访问了(连接失败,当然不能操作了)


进入MySql Command窗口,键入命令:

show processlist;

发现数据库里有几百个连接,而且都是Sleep状态。默认情况下,MySql的最大连接是100 或150 (看你的MySql版本),这么多Sleep的连接,马上就会把连接上占满。


到网上找了n久,都是讲用C3P0或其它连接池,或者用其它临时方案,kill掉连接。


其实分析原因,无非就是DbConnect创建了没有关闭。但问题是,对于WebServer,连接池的原理也是希望能够保持长连接,不可能手动关闭的。

解决方案一:

手动修改MySql的最大连接数到500到1000,就不会有这个错误了。

问题是,观察下来,这个连接数一直在增加,不一会儿就到了300+,之后就稳定下来。当然,增加一台服务器,连接数又增加。这个隐患太大了,以后要是连接个几十台服务器,这MySql还不要挂掉了。min

解决方案二:

分析下来,很可能还是自己代码的原因。就狂看代码,最后发现原因:每个Dao都有一份SessionFaction实例。

数据库的连接是SessionFactory来负责的,你可是调试下,每创建一个SessionFactory,就会增加n个连接(n是你在cfg.xml文件里配置的min_size),这可不得了,每个Project都有n多个Dao,这样很快连接数就满了。最好的办法还是一个Service使用一个SessionFaction实例,这样,连接数就控制在min_size和max_size之间。

最后的解决方案是,采用单例模式生成SessionFactory实例,所以Dao使用同一factory。测试下来,一个Service只有几个连接了。



Hibernate MySql "Too Many Connection"错误解决方案

标签:too many connection   hibernate   mysql   

原文地址:http://blog.csdn.net/shengang1978/article/details/40395299

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!