Tomcat 8.5.29에서 500 내부 서버 오류와 함께 EOFException이 발생합니다.

Tomcat 8.5.29에서 500 내부 서버 오류와 함께 EOFException이 발생합니다.

AWS-EKS 환경에서 스프링 엔드포인트에 액세스하려고 합니다. 이 문제를 로컬에서 재현하지는 않지만 프로덕션 로그에는 아래 EOF 예외와 함께 Lot 500 내부 서버 오류가 동시에 기록됩니다.

로그 유형: tomcat-server 메시지: [/something] 경로가 있는 컨텍스트에서 서블릿 [com.abc.platform.xservices.rest.abcApplication]에 대한 Servlet.service()가 예외 [org.glassfish.jersey.server.ContainerException: java. io.EOFException: 소켓에서 예기치 않은 EOF 읽기] 근본 원인 java.io.EOFException: org.apache의 org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:722) 소켓에서 예기치 않은 EOF 읽기. coyote.http11.Http11InputBuffer.access$300(Http11InputBuffer.java:40) org.apache.coyote.http11.Http11InputBuffer$SocketInputBuffer.doRead(Http11InputBuffer.java:1072)

프로덕션 환경에서 이 문제가 발생하는 이유에 대해 알고 계시나요? 감사해요.

답변1

내부 서버 오류입니다.응답으로 상태 코드 500

이는 잘못된 요청으로 인해 발생할 수 있지만 서버 코드나 과부하도 원인일 수 있습니다. 서버에 접근할 수 있다면 이벤트 로그를 확인하세요.

또한보십시오

청크 헤더가 예상되는 경우 500 EOF

LWP::UserAgent가 '500 EOF'로 실패하는 이유는 무엇입니까?

Perl 스크립트의 응답 상태 줄 대신 500 EOF

Apache 1.3 오류 - HTTP 상태를 읽는 예기치 않은 EOF - 연결 재설정

오류 500!

업데이트 반면에 응답 메시지가 아니고 실제 예외인 경우 단순한 버그일 수 있습니다.예전 자바처럼 해결 방법은 try/catch 내부에 getResponseCode()를 넣고 예외 발생 시 두 번째 호출을 수행하는 것입니다.

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

연결 수 제한으로 이야기하고 읽으십시오.

관련 정보