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

用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只有几个连接了。

时间: 2024-10-15 00:43:35

Hibernate MySql "Too Many Connection"错误解决方案的相关文章

MySql (2003) 错误解决方案

最近在连接mysql时,出现错误 网上查了下,也没找到好的解决方案.最后,经过反复摸索,终于让我找到了解决办法:其实很简单 找到mysql的bin目录下的mysqld.exe,双击启动下就好了.

关于mysql的access denied 错误解决方案

mysql -u root -p 按回车,输入密码后提示access denied......ues password YES/NO的错误? 第一步: 这时你需要进入/etc/mysql目录下,然后sudo vim/vi debian.cnf查看里面的用户名和密码,然后使用这个文件中的用户名和密码进入mysql,假如debian.cnf中的用户名为debian-sys-maint,则: mysql -u debian-sys-maint -p按回车,这时需要你输入密码,复制debian.cnf中

MySQL Study之--“too many connections”错误解决方案

MySQL Study之--"too many connections"错误解决方案 错误信息如下:Can not connect to MySQL server Error: Too many connectionsErrno.: 1040 Similar error report has beed dispatched to administrator before. 以下是mysql.com网站的相关说明:        If you get a Too many connect

MYSQL中'TYPE=MyISAM'错误的解决方案

create 语句后面的TYPE=MyISAM TYPE=MyISAM 和 ENGINE=MyISAM 都是设置数据库存储引擎的语句 ,(老版本的MySQL使用TYPE而不是ENGINE(例如,TYPE = MYISAM). MySQL 5.1为向下兼容而支持这个语法,但TYPE现在被轻视,而ENGINE是首先的用法. 一般地,ENGINE 选项是不必要的:除非默认已经被改变了,MyISAM是默认存储引擎. 所以直接将原来TYPE=MyISAM 改成ENGINE=MyISAM 就可以了 MYSQ

MySQL Workbench 查询超时time out(Lost Connection)解决方案

在使用MySQL Workbench查询时,如果查询语句或表过于复杂,查询时间过长(一般600s),此时会报Lost Connection错误. 其实,此时所执行的查询语句依然在执行,只是页面显示超时而已. 如果想要修改time out的时间,可在Edit->Preferences->SQL Editor中修改: 从图中可以看出默认时间是600s,把这个值改大一些就行了.

Web项目打成war包部署到tomcat时报MySQL Access denied for user 'root'@'localhost' (using password: YES)错误解决方案

Web项目使用使用root账号root密码进行部署,通过Eclipse加载到Tomcat服务器可以发布成功,打成war包放到tomcat的webapps目录无法发布成功,报错: jdbc.properties涉及Mysql配置: 错误很明显,与MySQL密码有关,但是两种方式部署项目使用的jdbc.properties配置文件是一样的.所以肯定不是密码不对引起的,只好找度娘,O(∩_∩)O哈哈~. 网上大部分帖通过运行mysql -u root -p命令登录时也会报这个错误,所以,我就尝试这种方

mac系统nginx+php7.2+mysql环境配置错误解决方案

Tip:本文并非是配置的流程指导文件,只是错误解决方案的提示及建议 1.mac自带apache.php环境,需要先关闭,php默认相关环境(包含原来的php-fpm相关文件都清理掉,默认目录:/private/etc/php-fpm.conf)最好删除掉(可自行google下) 2.建议通过brew安装管理nginx,默认网站根目录: /usr/local/var/www brew install nginx 配置nginx解析php(注意这里我设置的是9090端口,因为自己的9000端口冲突了

Emoji表情符号录入MySQL数据库报错的解决方案

前言:手机app应用评论的时候,恢复表情符号,提示失败.?1,查看tomcat后台日志,核心报错信息如下:  Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x97\xF0\x9F...' for column 'CONTENT' at row 1at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)at com.mysql.

基于Struts+Hibernate开发过程中遇到的错误

1.import  javax.servlet.http.HttpServletRequest 导入包出错 导入包出错,通常是包未引入,HttpServletRequest包是浏览器通过http发出的请求, 需要将tomcat/lib 目录下的 servlet-api.jar导入.但是导入后仍然不行,重启eclipse也无法让他生效 最后通过 project -clean来生效的. 2.JSP界面中加入了form标签后就报错 解决办法:将tomcat/lib目录下的el-api,ecj-4.3.