Tomcat 8.5.29 が 500 内部サーバー エラーで EOFException をスローする

Tomcat 8.5.29 が 500 内部サーバー エラーで EOFException をスローする

AWS-EKS 環境で Spring エンドポイントにアクセスしようとしています。この問題はローカルで再現していませんが、実稼働ログには、ロット 500 内部サーバー エラーと、同時に以下の EOF 例外が記録されています。

ログタイプ: tomcat-server メッセージ: コンテキスト [/something] のサーブレット [com.abc.platform.xservices.rest.abcApplication] の Servlet.service() が例外 [org.glassfish.jersey.server.ContainerException: java.io.EOFException: ソケットで予期しない EOF が読み取られました] をスローしました。根本原因は java.io.EOFException: ソケットで予期しない EOF が読み取られたことです。場所: org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:722)、場所: org.apache.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 が発生しました - connectionreset

エラー500!

更新 一方、応答メッセージではなく実際の例外である場合は、単なるバグである可能性があります。昔のJavaと同じように 回避策としては、getResponseCode() を try/catch 内に配置し、例外が発生したときに 2 回目に呼び出すという方法があります。

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

接続数制限により通話中、読み取ります。

関連情報