Tomcat 8.5.29 бросает EOFException с 500 Internal Server Error

Я пытаюсь получить доступ к конечной точке spring в среде AWS-EKS, я не воссоздаю эту проблему локально, но в производственных журналах мы видим много 500 Internal Server Error with below EOF Exception logged at same time:

logtype: tomcat-server сообщение: Servlet.service() for servlet [com.abc.platform.xservices.rest.abcApplication] in context with path [/something] threw exception [org.glassfish.jersey.server.ContainerException: java.io.EOFException: Unexpected EOF read on the socket] с первопричиной java.io.EOFException: Неожиданное чтение EOF на сокете at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:722) at org.apache.coyote.http11.Http11InputBuffer.access$300(Http11InputBuffer.java:40) at org.apache.coyote.http11.Http11InputBuffer$SocketInputBuffer.doRead(Http11InputBuffer.java:1072)

Есть идеи, почему мы видим эту проблему на производстве? Спасибо.

1
задан 10 August 2021 в 14:27
1 ответ

Это внутренняя ошибка сервера, которая возвращает код состояния 500 в ответ

Это может быть вызвано некорректными запросами, но также причиной может быть код сервера или перегрузка. Если у вас есть доступ к серверу, проверьте журналы событий.

См. также

500 EOF при ожидаемом заголовке фрагмента

Почему LWP::UserAgent может дать сбой с '500 EOF'?

500 EOF вместо строки состояния ответа в скрипте perl

Ошибка Apache 1.3 - Неожиданное чтение EOF-статуса HTTP - connectionreset

Ошибка 500!

UPDATE С другой стороны, если это не ответное сообщение, а настоящее исключение, то это может быть просто баг, как и в старой java И обходной путь может заключаться в том, чтобы поместить getResponseCode() внутрь try/catch и вызвать второй раз при исключении:

int responseCode = -1;
    try {
        responseCode = con.getResponseCode();
    } catch (IOException ex1) {
        //check if it's eof, if yes retrieve code again
        if (-1 != ex1.getMessage().indexOf("EOF")) {
            try {
                responseCode = con.getResponseCode();
            } catch (IOException ex2) {
                System.out.println(ex2.getMessage());
                // handle exception
            }
        } else {
            System.out.println(ex1.getMessage());
            // handle exception
        }
    }

Говоря об ограничении количества подключений, прочтите.

0
ответ дан 10 August 2021 в 15:55

Теги

Похожие вопросы