2013-10-07 105 views
0

上有,在我的日誌文件中每一次出現錯誤:如何解決MySQL jdbc socket關閉SocketException?

com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 
** BEGIN NESTED EXCEPTION ** 
java.net.SocketException 
MESSAGE: Socket closed 
STACKTRACE: 
java.net.SocketException: Socket closed 
    at java.net.SocketInputStream.socketRead0(Native Method) 
    at java.net.SocketInputStream.read(SocketInputStream.java:129) 
    at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:113) 
    at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:160) 
    at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:188) 
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1994) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2411) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2916) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723) 
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3250) 
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3179) 
    at com.mysql.jdbc.Statement.executeQuery(Statement.java:1207) 
    at com.mchange.v2.c3p0.impl.NewProxyStatement.executeQuery(NewProxyStatement.java:35) 

它總是發生在同一地點的代碼,當應用程序確實在MySQL數據庫中特定的查詢。

查詢是這樣的:

SELECT M.*, O.id 
FROM order_message M 
INNER JOIN orders O ON M.order_id = O.id 
WHERE O.seller_id = 14224 AND M.sender_user_id <> 14224 
ORDER BY M.creation_date DESC 
LIMIT 5 

我發現(通過解釋此查詢),它總是使用臨時/文件排序執行。所有索引都已正確創建,我認爲這些方法無法改進,但我懷疑查詢性能或資源利用率會導致異常錯誤。

我使用Amazon RDS

+0

是否有可能用c3p0重現此圖片? –

+1

請顯示調用此查詢的Java代碼以及所有其他相關代碼。 –

回答

0

的問題是,我的連接池的方式,這需要較長的時間超過10秒的任何數據庫連接將被連接池(C3P0)被丟棄配置。我正在使用unreturnedConnectionTimeout參數。

c3p0文檔頁面不鼓勵使用此參數。理想情況下,所有的連接應正確關閉(從而返回到池)

http://www.mchange.com/projects/c3p0/#unreturnedConnectionTimeout

我已在參數增加到60秒,問題得到解決。