mysql提示Too many connections

原因:与mysql数据库连接未正确(应该说是未及时)释放.

ps:测试项目,用到了多种数据库连接方式,出现问题的是hibernate获取session时未及时释放与数据库的连接,在页面不停的点击时导致连接池很快达到数据库最大允许数目。

查看和设置mysql数据库最大连接数:

查看:show variables like '%max_connections%';

重置最大连接数:set global max_connections=200;

最开始我的数据库用的默认设置(100连接),很快超出100报如题异常,后面看了网上很多说是直接加大最大连接数,这样不靠谱,正常应用的话不可能过一段时间,当连接数未来得及释放再次达到设置的最大值时重启服务,这样虽然可以重置当前连接数,但觉得太那个啥了。。。

本人的解决方式:

①原始方式

这样的方式在每次请求相关session操作(crud)时都会新生成一个与MySQL的连接,虽然每次都有调用session.close();

但还是发现mysql数据库连接并未及时释放连接,通过指令:show status like 'Thread%';

发现当前连接数:Threads_connected参数一直在增加,并未减少,具体原因没来得及深究,太晚了。。。

②修改方式

  使用静态模式,使每次请求得到的session都是同一个,不会像①方式中每次请求都和MySQL新建立一个连接,从而可避免连接数很快爆满。

  此处注意,在得到session使用完后不能用如close方法关闭,否则其它地方就与数据库断连了。

  虽然这个连接一直存在,占用连接池空间,但只占用1个,对应用整体影响很小,而且在配置文件中配置了最大连接数和空闲连接数,当此连接不再使用时是可以得到释放的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值