Неожиданное закрытие соединения, когда активен keep-alive - PullRequest
2 голосов
/ 10 мая 2019

У меня возникли проблемы с HTTP-соединениями на нашем сервере после длительной транзакции. Следующий запрос приведет к исключению java.net.SocketException: неожиданный конец файла с сервера .

Это прекрасно работает, если я отключаю поддержку активности на HTTP-сервере Apache или на JVM с клиента.

Установка:

  • HTTP-сервер Apache, конфигурация по умолчанию (также пытались увеличить время ожидания активности до 60 сек), подключенный к tomcat через AJP
  • сервер Apache Tomcat, по умолчанию conf
  • Приложение сервера Java (Spring stack), отвечающее на HTTP-запросы внутри tomcat
  • Java-клиент (Spring, RestTemplate) -> снимать HTTP-вызовы с этого сервера
  • Клиент Java может работать на том же сервере (-> http против localhost) или на другом компьютере, проблема остается прежней
  • iptables отключен на сервере
  • Для теста использовался только один клиент -> в данный момент никакой другой клиент не подключался к серверу

Что происходит?

...other stuff...
13:39:32.018 Do Rest call
13:39:32.111 Rest call return headers: Keep-Alive=[timeout=60, max=97], Connection=[Keep-Alive]
13:39:32.609 Do Rest call
13:39:33.849 Rest call return headers: Keep-Alive=[timeout=60, max=96], Connection=[Keep-Alive]
13:39:33.869 Do Rest call
...LONG RUNNING TRANSACTION...
13:40:05.828 Rest call return headers: Keep-Alive=[timeout=60, max=95], Connection=[Keep-Alive]
13:40:05.833 Do Rest call -> _java.net.SocketException: Unexpected end of file from server_; no trace in any log file on the server for this request

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

Здесь вы можете увидеть транзакции, зарегистрированные на сервере с помощью tshark Wireshark log

...