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
이는 잘못된 요청으로 인해 발생할 수 있지만 서버 코드나 과부하도 원인일 수 있습니다. 서버에 접근할 수 있다면 이벤트 로그를 확인하세요.
또한보십시오
LWP::UserAgent가 '500 EOF'로 실패하는 이유는 무엇입니까?
Apache 1.3 오류 - HTTP 상태를 읽는 예기치 않은 EOF - 연결 재설정
업데이트 반면에 응답 메시지가 아니고 실제 예외인 경우 단순한 버그일 수 있습니다.예전 자바처럼 해결 방법은 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
}
}
연결 수 제한으로 이야기하고 읽으십시오.