原因:与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个,对应用整体影响很小,而且在配置文件中配置了最大连接数和空闲连接数,当此连接不再使用时是可以得到释放的。