73

Tomcat ベースの Web アプリケーションがあります。次の例外が断続的に発生します。

Caused by: java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:150)
    at java.net.SocketInputStream.read(SocketInputStream.java:121)
    at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:532)
    at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:501)
    at org.apache.coyote.http11.InternalInputBuffer$InputStreamInputBuffer.doRead(InternalInputBuffer.java:563)
    at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:124)
    at org.apache.coyote.http11.AbstractInputBuffer.doRead(AbstractInputBuffer.java:346)
    at org.apache.coyote.Request.doRead(Request.java:422)
    at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:290)
    at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:431)
    at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:315)
    at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:200)
    at java.nio.channels.Channels$ReadableByteChannelImpl.read(Channels.java:385)

残念ながら、私はクライアントにアクセスできないため、これが発生する可能性があるさまざまな理由を確認しようとしていますが、

  1. サーバーは要求からデータを読み取ろうとしていますが、データがクライアントから到着するまでにタイムアウト値よりも時間がかかります。ここでのタイムアウトは通常、Tomcat コネクタ → connectionTimeout 属性になります。

  2. クライアントには読み取りタイムアウトが設定されており、サーバーは応答にそれ以上の時間がかかっています。

  3. 私が調べたスレッドの 1 つは、これは同時実行性が高く、キープアライブが有効になっている場合に発生する可能性があると述べています。

#1 の場合、設定した初期値は 20 秒でした。これを 60 秒まで上げて、テストし、変更があるかどうかを確認します。

また、専門家の意見をいただける方がいらっしゃいましたら、大変参考になります。または、この問題を引き起こす可能性があると考えられるその他の理由。

4

7 に答える 7

2
Connection.Response resp = Jsoup.connect(url) //
                .timeout(20000) //
                .method(Connection.Method.GET) //
                .execute();

実際、インターネットが遅いとエラーが発生するため、タイムアウト時間を最大化してみてください。そうすれば、コードは間違いなく機能します。

于 2019-03-05T15:09:32.973 に答える