2013-11-25 422 views
2

我在SpringMySQLHibernate項目,該項目還包含一個主應用程序,它看起來在不斷它的工作原理,但根據後數分鐘應用拋出異常錯誤org.hibernate.util.JDBCExceptionReporter - 通信鏈路故障

數據庫工作
0 [Thread-1] ERROR org.hibernate.util.JDBCExceptionReporter - Communications link failure 

Last packet sent to the server was 1 ms ago. 
Exception in thread "Thread-1" 3 [Thread-1] ERROR org.hibernate.util.JDBCExceptionReporter - Communications link failure 

Last packet sent to the server was 1 ms ago. 
org.hibernate.exception.JDBCConnectionException: Cannot open connection 
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:99) 
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52) 
    at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449) 
    at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) 
    at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161) 
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1596) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:717) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270) 
    at org.hibernate.loader.Loader.doList(Loader.java:2294) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2172) 
    at org.hibernate.loader.Loader.list(Loader.java:2167) 
    at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:119) 
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1706) 
    at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347) 
    at com.qait.cdl.commons.dao.impl.CDLHibernateDaoImpl.findAll(CDLHibernateDaoImpl.java:77) 
    at com.qait.cdl.insertIsbn.InsertIsbnDatabaseLookup.run(InsertIsbnDatabaseLookup.java:27) 
    at java.lang.Thread.run(Thread.java:724) 
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 

Last packet sent to the server was 1 ms ago. 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) 
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074) 
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2103) 
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:718) 
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46) 
    at sun.reflect.GeneratedConstructorAccessor11.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) 
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302) 
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282) 
    at java.sql.DriverManager.getConnection(DriverManager.java:571) 
    at java.sql.DriverManager.getConnection(DriverManager.java:187) 
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:173) 
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:164) 
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:153) 
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:119) 
    at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:83) 
    at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) 
    ... 14 more 
Caused by: java.net.NoRouteToHostException: Cannot assign requested address 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) 
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
    at java.net.Socket.connect(Socket.java:579) 
    at java.net.Socket.connect(Socket.java:528) 
    at java.net.Socket.<init>(Socket.java:425) 
    at java.net.Socket.<init>(Socket.java:241) 
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:253) 
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:280) 
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2026) 
    ... 30 more 

我搜索了很多聯繫,但沒有得到確切/滿意的原因,以及如何克服

回答

1

正如我所說,有一個主要的應用程序,不斷查看數據庫中的每個命中使用套接字到數據庫,當所有的套接字使用時,它給由OS發送到JVM的NoRouteToHostException。爲了重新使用插座,我使用下面提到的命令 echo "1" >/proc/sys/net/ipv4/tcp_tw_reuse和/或echo "1" >/proc/sys/net/ipv4/tcp_tw_recycle,這是解釋here

+0

如果在Windows環境中發生異常,我必須做些什麼。 –

2

的根本原因是NoRouteToHostException,這意味着底層的OS發出了一個「無路由到達主機」 TCP/IP錯誤給JVM。這表示數據庫服務器和本機之間的網絡問題;檢查系統的操作系統日誌(例如Linux上的dmesg)以查看網卡是否存在連接故障。如果沒有,您的網絡路由會出現間歇性問題,您需要使用網絡管理員對其進行故障排除。

+0

我使用的是ubuntu,數據庫服務器和在同一臺機器上運行的應用程序。請告訴我爲什麼這種異常在5分鐘內發生,有些需要1小時發生 – rahul

+0

@rahul您綁定到網卡的外部IP而不是回送地址(本地主機)。在出現錯誤後檢查您的內核日誌,並查看您的網絡連接是否已脫機。 – chrylis

+0

所有的web應用程序也工作,我沒有在tomcat中得到這個錯誤,儘管在每個請求上都有數據庫命中 – rahul

相關問題