Tomcat下java.net.SocketTimeoutException:读取超时

2023-12-20

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

不幸的是,我无法访问客户端,所以我只是试图确认这种情况可能发生的各种原因,

  1. 服务器正在尝试从请求中读取数据,但数据从客户端到达的超时值要长。这里的超时通常是 Tomcat 连接器→connectionTimeout 属性。

  2. 客户端设置了读取超时,而服务器响应时间比该超时长。

  3. 我经历过的一个线程说,如果启用了 keepalive,那么在高并发情况下可能会发生这种情况。

对于 #1,我设置的初始值是 20 秒,我已将其提高到 60 秒,将进行测试,看看是否有任何变化。

同时,如果你们中有人能就此提供专家意见,那将会非常有帮助。或者就此而言,您可以想到可能导致此问题的任何其他原因。


服务器正在尝试从请求中读取数据,但数据从客户端到达的超时值要长。这里的超时通常是tomcat连接器->connectionTimeout属性。

Correct.

客户端设置了读取超时,而服务器响应时间比该超时长。

不,这会导致超时在客户端。

我经历过的一个线程说,如果启用了 keepalive,这种情况可能会在高并发情况下发生。

这显然是猜测,而且完全错误。当且仅当超时内没有数据到达时才会发生。时期。负载、保活和并发性与此无关。

这只是意味着客户端没有发送。你不需要担心它。浏览器客户端以各种奇怪的方式来来去去。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tomcat下java.net.SocketTimeoutException:读取超时 的相关文章

随机推荐