Tomcat 8.5.29 lança EOFException com 500 erros internos do servidor

Tomcat 8.5.29 lança EOFException com 500 erros internos do servidor

Estou tentando acessar o endpoint Spring no ambiente AWS-EKS, não estou recriando esse problema localmente, mas nos logs de produção vemos o lote 500 Erro interno do servidor com a exceção EOF abaixo registrada ao mesmo tempo:

logtype: mensagem do servidor tomcat: Servlet.service() para servlet [com.abc.platform.xservices.rest.abcApplication] no contexto com caminho [/something] lançou exceção [org.glassfish.jersey.server.ContainerException: java. io.EOFException: leitura EOF inesperada no soquete] com causa raiz java.io.EOFException: leitura EOF inesperada no soquete em org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:722) em org.apache. coyote.http11.Http11InputBuffer.access$300(Http11InputBuffer.java:40) em org.apache.coyote.http11.Http11InputBuffer$SocketInputBuffer.doRead(Http11InputBuffer.java:1072)

Alguma ideia de por que vemos isso em questão na produção? Obrigado.

Responder1

É um erro interno do servidor, que retornacódigo de status 500 em resposta

Isso pode ser causado por solicitações incorretas, mas também o código do servidor ou a sobrecarga podem ser o motivo. Se você tiver acesso ao servidor, verifique os logs de eventos.

Veja também

500 EOF quando o cabeçalho do bloco é esperado

Por que o LWP::UserAgent pode estar falhando com '500 EOF'?

500 EOF em vez da linha de status de resposta no script perl

Erro do Apache 1.3 - EOF inesperado lendo status HTTP - connectionreset

Erro 500!

ATUALIZAÇÃO Por outro lado, se não for uma mensagem de resposta, mas uma exceção real, então pode ser simplesmente um bug,assim como no java antigo E a solução alternativa pode ser colocar getResponseCode() dentro de try/catch e chamar pela segunda vez na exceção:

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
        }
    }

Falando por limite de número de conexões, leia.

informação relacionada