Как устранить исключение сброса подключения во время выполнения пакетного задания Spring?

Я сталкиваюсь с 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]

Спасибо

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

Compass 24.07.2018 17:12

На выполнение около 80 тыс. Транзакций уходит около 1 часа 45 минут, но в промежутках я вижу сбои. Например, из 80К 70 транзакций завершаются неудачно из-за этой ошибки.

David 24.07.2018 17:19

Какой бы ни была ваша целевая система, она должна иметь журналы, объясняющие, почему она закрывает соединение, если есть несколько отдельных сбоев.

Compass 24.07.2018 17:23

Вот что там написано, я добавил журнал как часть своего вопроса. Я вижу исключение сброса соединения только для отдельных транзакций.

David 24.07.2018 17:25
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
393
0

Другие вопросы по теме