2012-12-20 66 views
4

我的簡單網頁應用程序在瀏覽網站時有時會崩潰,我從日誌中獲得的錯誤消息如下。我完全不知道是什麼原因造成的,我會非常感謝任何能夠讓我朝着正確方向發展的提示。com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:連接過多

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

類型異常報告

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) 

根源

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) 

根源

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) 

我米使用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> 

回答

2

它看起來像你泄漏連接大時間。當你完成它們後,你是否關閉休眠會話?

您也可以嘗試和撥打hibernate.connection.release_mode,默認情況下,它設置爲自動,並在關閉會話時釋放連接。但是,您也可以在這裏使用after_transactionafter_statement(當它釋放兩個連接中的每個連接時,它會自我解釋):P)。

有了,雖然說,你需要找出你泄漏是:)

+2

在我的應用程序4次使用會話1次未關閉這是我的錯誤,檢查它。 –

2

它清楚地看到Hibernate是無法創建或打開數據庫連接可能有許多原因,其中一些是

  1. 您在不關閉會話您程序使用會話後
  2. 連接池很小,太多線程正在訪問該池。

請粘貼您的配置和異常點程序

添加

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

屬性和調用Session.close();在您的方法結束時

+0

謝謝快速重播 –

+0

請更新您的 –

+0

是如何獲得的會話和你是如何在會議閉幕 –

2

可能的原因是您的Web應用程序可能泄漏連接或連接池大小非常小,因此所有打開的連接當前正在使用並且無法獲得新的連接。

我不知道Tomcat的,但在JBoss中,我們通常指的是數據源文件,你可以設置連接池的大小爲

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

你甚至可以登錄到Tomcat的管理控制檯,並檢查有多少每當你得到這個異常時,連接實際上都在使用中。管理控制檯將爲您提供有史以來創建的最大連接對象以及與連接池相關的各種其他信息。

+0

感謝快重播,我已經使用了1000次,請參閱更新 –

+0

請檢查Tomcat的管理控制檯並查看在任何時間點創建了多少個最大JDBC連接。 1000是一個很大的數字..這可能是因爲你的Web應用程序只是創建一個連接,但並未完全關閉它......當執行結束或終止時連接總是應該關閉。 – AngelsandDemons

+0

這是解決錯誤是會話未關閉 –

相關問題