Tomcat 8.5.29 拋出 EOFException 並顯示 500 內部伺服器錯誤

Tomcat 8.5.29 拋出 EOFException 並顯示 500 內部伺服器錯誤

我正在嘗試在 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

這可能是由不正確的請求引起的,但伺服器程式碼或過載也可能是原因。如果您有權存取伺服器,請檢查事件日誌。

也可以看看

當需要塊頭時為 500 EOF

為什麼 LWP::UserAgent 可能會失敗並顯示“500 EOF”?

500 EOF 而不是 perl 腳本中的回應狀態行

Apache 1.3 錯誤 - 意外的 EOF 讀取 HTTP 狀態 - 連線重置

錯誤500!

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

受連線數限制,閱讀。

相關內容