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)
残念ながら、クライアントにアクセスできないため、さまざまな理由でこれが発生する可能性があることを確認しようとしていますが、
サーバーは要求からデータを読み取ろうとしていますが、クライアントからデータが届くまでのタイムアウト値よりも時間がかかります。ここでのタイムアウトは通常、Tomcatコネクタ-> connectionTimeout属性です。
クライアントには読み取りタイムアウトが設定されており、サーバーは応答に時間がかかります。
私が経験したスレッドの1つは、これが高い並行性で発生する可能性があり、キープアライブが有効になっていると言いました。
#1の場合、私が設定した初期値は20秒でしたが、これを最大60秒まで上げ、テストして変更があるかどうかを確認します。
一方、皆さんのいずれかがこれについて専門家の意見を提供できる場合、それは本当に役に立ちます。または、この問題を引き起こす可能性のある他の理由を考えることができます。
サーバーは要求からデータを読み取ろうとしていますが、クライアントからデータが届くまでのタイムアウト値よりも時間がかかります。ここでのタイムアウトは通常、Tomcatコネクタ-> connectionTimeout属性です。
正しい。
クライアントには読み取りタイムアウトが設定されており、サーバーは応答に時間がかかります。
いいえ。タイムアウトになりますクライアントで
私が経験したスレッドの1つは、これが高い並行性で発生する可能性があり、キープアライブが有効になっていると言いました。
これは明らかに当て推量であり、完全に間違っています。タイムアウト内にデータが到着しない場合にのみ発生します。期間。ロードとキープアライブと同時実行は、それとは何の関係もありません。
クライアントが送信していないことを意味します。心配する必要はありません。ブラウザクライアントは、あらゆる種類の奇妙な方法で出入りします。
基本的な手順は次のとおりです。
%CATALINA_HOME%/conf/server.xml
)の下の「conf」フォルダーで「server.xml」ファイルを見つけます。<Connector
を検索します。protocol="HTTP/1.1"
を持つコネクタです。connectionTimeout
値がコネクタに設定されている場合、増やす必要がある場合があります。 20000ミリ秒(= 20秒)から120000ミリ秒(= 2分)まで。コネクタにconnectionTimeout
プロパティ値が設定されていない場合、デフォルトは60秒です。これが不十分な場合、プロパティの追加が必要になる場合があります。Connection.Response resp = Jsoup.connect(url) //
.timeout(20000) //
.method(Connection.Method.GET) //
.execute();
実際には、インターネットが遅いときにエラーが発生するため、タイムアウト時間を最大化しようとすると、コードは間違いなく機能します。