我正在嘗試在 AWS-EKS 環境中存取 spring 端點,我不會在本地重新建立此問題,但在生產日誌中,我們看到大量 500 內部伺服器錯誤,同時記錄了以下 EOF 異常:
logtype: tomcat-server 訊息: servlet [com.abc.platform.xservices.rest.abcApplication] 的Servlet.service() 在路徑[/something] 的上下文中拋出異常[org.glassfish.jersey.server.ContainerException: java. io.EOFException:在套接字上讀取意外的EOF],根本原因是java.io.EOFException:在org.apache 的org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:722)的套接字上讀取意外的EOF。
知道為什麼我們在生產中看到這個問題嗎?謝謝。
答案1
這是一個內部伺服器錯誤,會回傳響應狀態碼 500
這可能是由不正確的請求引起的,但伺服器程式碼或過載也可能是原因。如果您有權存取伺服器,請檢查事件日誌。
也可以看看
為什麼 LWP::UserAgent 可能會失敗並顯示“500 EOF”?
Apache 1.3 錯誤 - 意外的 EOF 讀取 HTTP 狀態 - 連線重置
UPDATE 另一方面,如果它不是回應訊息,而是真正的異常,那麼它可能只是一個錯誤,就像在舊的java中一樣 解決方法可能是將 getResponseCode() 放在 try/catch 中並在異常時第二次呼叫:
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
}
}
受連線數限制,閱讀。