Com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Too many connections

My simple web application sometimes crashes when navigating the site, an error message appears that I received from the logs. I have absolutely no idea what causes this, and will be very grateful for any advice that will lead me in the right direction.

HTTP Status 500 - org.hibernate.exception.JDBCConnectionException: Cannot open connection 

Exception Report Type

 message org.hibernate.exception.JDBCConnectionException: Cannot open connection description The server encountered an internal error that prevented it from fulfilling this request. exception org.apache.jasper.JasperException: org.hibernate.exception.JDBCConnectionException: Cannot open connection org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 

The main reason

 org.hibernate.exception.JDBCConnectionException: Cannot open connection org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:97) org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52) org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449) org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161) org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1573) org.hibernate.loader.Loader.doQuery(Loader.java:696) org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259) org.hibernate.loader.Loader.doList(Loader.java:2228) org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125) org.hibernate.loader.Loader.list(Loader.java:2120) org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:118) org.hibernate.impl.SessionImpl.list(SessionImpl.java:1596) org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:306) com.html.XmlSetting.getListOfhtml_connect(XmlSetting.java:55) com.html.XmlSetting.removeXml(XmlSetting.java:121) com.html.MarginSetting.removeXml(MarginSetting.java:291) org.apache.jsp.check_jsp._jspService(check_jsp.java:183) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 

The main reason

 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Too many connections sun.reflect.GeneratedConstructorAccessor153.newInstance(Unknown Source) sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) java.lang.reflect.Constructor.newInstance(Constructor.java:532) com.mysql.jdbc.Util.handleNewInstance(Util.java:406) com.mysql.jdbc.Util.getInstance(Util.java:381) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:985) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957) com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3376) com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3308) com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:894) com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3808) com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1256) com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2032) com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:729) com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46) sun.reflect.GeneratedConstructorAccessor145.newInstance(Unknown Source) sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) java.lang.reflect.Constructor.newInstance(Constructor.java:532) com.mysql.jdbc.Util.handleNewInstance(Util.java:406) com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302) com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:283) java.sql.DriverManager.getConnection(DriverManager.java:620) java.sql.DriverManager.getConnection(DriverManager.java:169) org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:133) org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161) org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1573) org.hibernate.loader.Loader.doQuery(Loader.java:696) org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259) org.hibernate.loader.Loader.doList(Loader.java:2228) org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125) org.hibernate.loader.Loader.list(Loader.java:2120) org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:118) org.hibernate.impl.SessionImpl.list(SessionImpl.java:1596) org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:306) com.html.XmlSetting.getListOfhtml_connect(XmlSetting.java:55) com.html.XmlSetting.removeXml(XmlSetting.java:121) com.html.MarginSetting.removeXml(MarginSetting.java:291) org.apache.jsp.check_jsp._jspService(check_jsp.java:183) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 

I am using Apache Tomcat 7

hibernate.cfg.xml

 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/htmlcleaner</property> <property name="hibernate.connection.password">root</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.connection.zeroDateTimeBehavior">convertToNull</property> <property name="connection.pool_size">1000</property> <!-- <property name="show_sql">true</property> --> <mapping class="com.model.html_connect"/> </session-factory> </hibernate-configuration> 
+4
source share
3 answers

It seems like you are leaking connections very quickly. Do you close hibernation sessions when you are done with them?

You can also try and pretend using hibernate.connection.release_mode , by default this value is set to auto and it will release the connection when you close the session. However, you also have options for using after_transaction or after_statement (its a pretty clear explanation when it will release connections for each of the two: P).

With that said, you need to find out where you are flowing:

+2
source

It is clearly seen that hibernation cannot create or open a connection to the database, there can be many reasons, some of them

  • Your closing session in your program after the session
  • The connection pool is small and too many threads are accessing the pool.

Please insert your configuration and program with exception points

Add

 <property name="hibernate.connection.release_mode">on_close</property> 

and call session.close (); at the end of your method

+2
source

The possible reason for this is because your web application may have connection leaks or the connection pool size is very small, which is why all open connections are currently in use and a new connection cannot be received.

I'm not sure about Tomcat, but in JBoss we usually refer to the data source file and you can set the connection pool size as

  <max-pool-size>80</max-pool-size> 

You can even log into the Tomcat admin console and check how many connections are actually used when you get this exception. The administrative console will provide you with the maximum connection objects that have ever been created, and other information related to the connection pool.

+2
source

All Articles