我有一个基于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