Сервер Tomcat вызывает разрыв канала для больших нагрузок - PullRequest
1 голос
/ 18 апреля 2019

Я сделал простое приложение с пружинной загрузкой, которое возвращает статический ответ json на все запросы.

Когда приложение получает запрос с большой полезной нагрузкой (~ 5 МБ json, 1 TP), клиент получаетследующая ошибка:

java.net.SocketException: Broken pipe (Write failed)
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:111)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:155)

Я пытался увеличить каждый лимит, который мог - вот мои настройки tomcat:

spring.http.multipart.max-file-size=524288000
spring.http.multipart.max-request-size=524288000
spring.http.multipart.enabled=true
server.max-http-post-size=10000000
server.connection-timeout=30000
server.tomcat.max-connections=15000
server.tomcat.max-http-post-size=524288000
server.tomcat.accept-count=10000
server.tomcat.max-threads=200
server.tomcat.min-spare-threads=200

Что я могу сделать, чтобы сделать эту простую пружинную загрузку всего одним контроллером, для успешной обработки таких полезных нагрузок?

Это приложение Springboot и клиент, отправляющий большую полезную нагрузку, запускаются на 8-ядерном компьютере с оперативной памятью 16 ГБ.Так что ресурсы не должны быть проблемой.

1 Ответ

0 голосов
/ 18 апреля 2019

Это произошло потому, что контроллер возвращал ответ без использования тела запроса.Таким образом, сервер закрывает соединение, как только получает запрос, не используя полное тело запроса.Клиент все еще не завершил отправку запроса, и сервер закрыл соединение до этого.

Решение: 1. Считайте полное тело запроса в вашем коде 2. Установите для tomcat maxSwallowSize более высокое значение (по умолчанию: 2 МБ) server.tomcat.max-swallow-size = 10 МБ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...