Я сталкиваюсь с Connection reset exception во время Spring Batch Job run. Я пытался проанализировать основную причину этой ошибки и предложить решение, но не уверен, что ее вызывает. Сетевая команда говорит, что серверы работают нормально, прерывания соединения нет. Объем данных, обрабатываемых этим заданием, огромен, иногда 90 000 транзакций, но в большинстве случаев 80–85 000. Поэтому иногда я не вижу сбоев для транзакции 90 КБ, но иногда я вижу много Connection reset только для 60 КБ транзакций.
Пожалуйста, дайте мне знать, что еще я должен принять во внимание, чтобы избавиться от этого.
Трассировки стека:
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:209) ~[?:1.8.0_66]
at java.net.SocketInputStream.read(SocketInputStream.java:141) ~[?:1.8.0_66]
at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:136) ~[httpcore-4.3.2.jar:4.3.2]
at org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:152) ~[httpcore-4.3.2.jar:4.3.2]
at org.apache.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:270) ~[httpcore-4.3.2.jar:4.3.2]
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:140) ~[httpclient-4.3.5.jar:4.3.5]
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:57) ~[httpclient-4.3.5.jar:4.3.5]
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:260) ~[httpcore-4.3.2.jar:4.3.2]
at org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:161) ~[httpcore-4.3.2.jar:4.3.2]
at org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:153) ~[httpclient-4.3.5.jar:4.3.5]
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:271) ~[httpcore-4.3.2.jar:4.3.2]
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:123) ~[httpcore-4.3.2.jar:4.3.2]
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:254) ~[httpclient-4.3.5.jar:4.3.5]
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:195) ~[httpclient-4.3.5.jar:4.3.5]
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:86) ~[httpclient-4.3.5.jar:4.3.5]
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108) ~[httpclient-4.3.5.jar:4.3.5]
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184) ~[httpclient-4.3.5.jar:4.3.5]
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) ~[httpclient-4.3.5.jar:4.3.5]
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106) ~[httpclient-4.3.5.jar:4.3.5]
at com.mercuryinsurance.r3.util.RatingRequestProcessor.postRequestToDC(RatingRequestProcessor.java:376) ~[migration.jar:?]
at com.mercuryinsurance.r3.util.MigrationExecutorThread.run(MigrationExecutorThread.java:59) [migration.jar:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_66]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_66]
at java.lang.Thread.run(Thread.java:745) [?:1.8.0_66]
Спасибо
На выполнение около 80 тыс. Транзакций уходит около 1 часа 45 минут, но в промежутках я вижу сбои. Например, из 80К 70 транзакций завершаются неудачно из-за этой ошибки.
Какой бы ни была ваша целевая система, она должна иметь журналы, объясняющие, почему она закрывает соединение, если есть несколько отдельных сбоев.
Вот что там написано, я добавил журнал как часть своего вопроса. Я вижу исключение сброса соединения только для отдельных транзакций.




Соединение не может быть прервано, но если процесс занимает слишком много времени, сервер может зависнуть. Как долго работает соединение?