Tomcat 8.5.29 genera EOFException con un error interno del servidor 500

Tomcat 8.5.29 genera EOFException con un error interno del servidor 500

Estoy intentando acceder al punto final de Spring en el entorno AWS-EKS. No voy a recrear este problema localmente, pero en los registros de producción vemos el error interno del servidor 500 con la siguiente excepción EOF registrada al mismo tiempo:

logtype: mensaje del servidor tomcat: Servlet.service() para el servlet [com.abc.platform.xservices.rest.abcApplication] en contexto con la ruta [/something] arrojó una excepción [org.glassfish.jersey.server.ContainerException: java. io.EOFException: lectura de EOF inesperada en el socket] con causa raíz java.io.EOFException: lectura de EOF inesperada en el socket en org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:722) en org.apache. coyote.http11.Http11InputBuffer.access$300(Http11InputBuffer.java:40) en org.apache.coyote.http11.Http11InputBuffer$SocketInputBuffer.doRead(Http11InputBuffer.java:1072)

¿Alguna idea de por qué vemos esto en problemas en producción? Gracias.

Respuesta1

Es un error interno del servidor, que devuelvecódigo de estado 500 en respuesta

Esto puede deberse a solicitudes incorrectas, pero también el código del servidor o la sobrecarga pueden ser la razón. Si tiene acceso al servidor, consulte los registros de eventos.

Ver también

500 EOF cuando se esperaba un encabezado de fragmento

¿Por qué LWP::UserAgent podría estar fallando con '500 EOF'?

500 EOF en lugar de la línea de estado de respuesta en el script Perl

Error de Apache 1.3: EOF inesperado leyendo el estado HTTP - restablecimiento de la conexión

¡Error 500!

ACTUALIZAR Por otro lado, si no es un mensaje de respuesta, sino una excepción real, entonces puede ser simplemente un error.como en el viejo java Y la solución alternativa puede ser poner getResponseCode() dentro de try/catch y llamar por segunda vez en caso de excepción:

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

Hablando por límite de número de conexiones, lee.

información relacionada