java.net.SocketTimeoutException:在 Tomcat 下读取超时
2022-08-31 12:38:09
我有一个基于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 连接器→连接超时属性。
-
客户端具有读取超时集,并且服务器需要更长的时间来响应。
-
我经历的一个线程说,如果启用了 keepalive,则可以在高并发的情况下发生这种情况。
对于#1,我设置的初始值为20秒,我已将其提高到60秒,将进行测试,并查看是否有任何更改。
同时,如果你们中的任何一个人可以在这方面提供专家意见,那将是非常有帮助的。或者,对于这个问题,您可以想到的任何其他原因都可能导致此问题。