我有一個基於tomcat的web應用程序。我間歇性地收到以下異常,java.net.SocketTimeoutException:在tomcat下讀取超時
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屬性。
客戶端具有讀取超時設置,並且服務器花費的時間比響應時間要長。
我經歷的線程之一,說這可能發生在高併發性和Keepalive被啓用。
對於#1,我設定的初始值是20秒,我已經將它撞到了60秒,將測試並查看是否有任何變化。
同時,如果你們中的任何一個人都可以就此提供專家意見,那真的很有幫助。或者因爲這個原因你可以想到哪些可能會導致這個問題。
在此先感謝。
玉萍
我不相信這是2點;但是,爲了確認您還應該設置一個'AccessLogValve'並嘗試將此異常與特定請求關聯起來。 – fge
嗨Vicky,你能解決這個問題嗎?我面臨同樣的問題。 – Elina