2013-10-07 2 views
0

Существует на ошибку, которая появляется в моем файле журнала каждый раз, когда:Как решить MySQL jdbc socket closed 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 

Я заметил (Объясняя этот запрос), что он всегда использовать временный/FileSort для выполнения. Все индексы правильно созданы, и я думаю, что это не способ улучшить это, но я подозреваю, что производительность запроса или использование ресурсов вызывают ошибку исключения.

Я использую амазонку RDS

+0

Можно ли воспроизвести это с помощью c3p0 на картинке? –

+1

Пожалуйста, покажите код Java, который вызывает этот запрос, а также весь другой соответствующий код. –

ответ

0

Проблема заключалась в том, что мой пул подключений был настроен таким образом, что любое соединение с базой данных, что заняло больше времени, чем 10 секунд, будут сняты с помощью пула соединений (C3P0). Я использовал параметр unverturnedConnectionTimeout.

Страница документации c3p0 препятствует использованию этого параметра. В идеале, все соединения должны быть надлежащим образом закрыты (и, таким образом, возвращается в пул)

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

я увеличил параметр до 60 секунд, и проблема решена получить.

Смежные вопросы