我有一个基于 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 属性。
-
客户端设置了读取超时,而服务器响应时间比该超时长。
-
我经历过的一个线程说,如果启用了 keepalive,那么在高并发情况下可能会发生这种情况。
对于 #1,我设置的初始值是 20 秒,我已将其提高到 60 秒,将进行测试,看看是否有任何变化。
同时,如果你们中有人能就此提供专家意见,那将会非常有帮助。或者就此而言,您可以想到可能导致此问题的任何其他原因。
服务器正在尝试从请求中读取数据,但数据从客户端到达的超时值要长。这里的超时通常是tomcat连接器->connectionTimeout属性。
Correct.
客户端设置了读取超时,而服务器响应时间比该超时长。
不,这会导致超时在客户端。
我经历过的一个线程说,如果启用了 keepalive,这种情况可能会在高并发情况下发生。
这显然是猜测,而且完全错误。当且仅当超时内没有数据到达时才会发生。时期。负载、保活和并发性与此无关。
这只是意味着客户端没有发送。你不需要担心它。浏览器客户端以各种奇怪的方式来来去去。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)