Tomcat 8.5.29 wirft EOFException mit 500 Internal Server Error

Tomcat 8.5.29 wirft EOFException mit 500 Internal Server Error

Ich versuche, auf den Spring-Endpunkt in einer AWS-EKS-Umgebung zuzugreifen. Ich kann das Problem lokal nicht reproduzieren, aber in den Produktionsprotokollen sehen wir „Los 500 interne Serverfehler“ mit der folgenden gleichzeitig protokollierten EOF-Ausnahme:

logtype: Tomcat-Server-Meldung: Servlet.service() für Servlet [com.abc.platform.xservices.rest.abcApplication] im Kontext mit Pfad [/etwas] hat eine Ausnahme ausgelöst [org.glassfish.jersey.server.ContainerException: java.io.EOFException: Unerwartetes EOF-Lesen auf dem Socket] mit Grundursache java.io.EOFException: Unerwartetes EOF-Lesen auf dem Socket bei org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:722) bei org.apache.coyote.http11.Http11InputBuffer.access$300(Http11InputBuffer.java:40) bei org.apache.coyote.http11.Http11InputBuffer$SocketInputBuffer.doRead(Http11InputBuffer.java:1072)

Irgendeine Idee, warum dies in der Produktion ein Problem ist? Danke.

Antwort1

Es handelt sich um einen internen Serverfehler, derStatuscode 500 als Antwort

Dies kann durch falsche Anfragen verursacht werden, aber auch Servercode oder Überlastung können die Ursache sein. Wenn Sie Zugriff auf den Server haben, überprüfen Sie die Ereignisprotokolle.

Siehe auch

500 EOF, wenn Chunk-Header erwartet wird

Warum könnte LWP::UserAgent mit „500 EOF“ fehlschlagen?

500 EOF statt Antwortstatuszeile im Perl-Skript

Apache 1.3-Fehler – Unerwartetes EOF beim Lesen des HTTP-Status – Verbindungsreset

Fehler 500!

UPDATE Wenn es sich andererseits nicht um eine Antwortnachricht, sondern um eine echte Ausnahme handelt, dann kann es sich einfach um einen Fehler handeln.genau wie im alten Java Eine Problemumgehung könnte darin bestehen, getResponseCode() in try/catch einzufügen und bei einer Ausnahme ein zweites Mal aufzurufen:

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

Sprechen nach Anzahl der Verbindungen, lesen Sie.

verwandte Informationen