sockets java。网SocketTimeoutException:在Tomcat下读取超时
我有一个基于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秒,将进行测试,看看是否有任何更改
同时,如果你们中的任何一个人能就此提供专家意见,那将非常有帮助。或者你能想到的任何其他可能导致这个问题的原因
# 1 楼答案
我在尝试从请求主体读取数据时遇到了同样的问题。在我的例子中,这只会随机发生在基于移动的客户端设备上。因此,我将
connectionUploadTimeout
增加到1min,正如这个link所建议的那样# 2 楼答案
我也有同样的问题。爪哇。网SocketTimeoutException:在Mac 11.1下,Tomcat会发生读取超时错误,但在Mac 10.13下,它可以完美地工作。相同的Tomcat文件夹,相同的WAR文件。我尝试过将超时值设置得更高,但我所做的一切都不起作用。 如果我在常规Java应用程序中运行相同的SpringBoot代码(在Tomcat 9.0.41之外(也尝试了其他版本),那么它也可以工作
Mac 11.1似乎在干扰Tomcat
作为另一个测试,如果我将WAR文件复制到AWS EC2实例,它也可以正常工作
花了几天时间试图解决这个问题,但无法解决
建议(非常欢迎!)
# 3 楼答案
对
否。这将导致客户端超时
这显然是猜测,完全不正确。只有在超时时间内没有数据到达时才会发生。时期Load、keepalive和并发与此无关
这只是意味着客户端没有发送。你不必担心。浏览器客户端以各种奇怪的方式来来去去去
# 4 楼答案
这意味着服务器响应超时。这是由于服务器配置和internet响应引起的
# 5 楼答案
以下是基本说明:-
%CATALINA_HOME%/conf/server.xml
)李><Connector
李>protocol="HTTP/1.1"
的连接器李>connectionTimeout
属性值,默认值为60秒-如果这不够,可能需要添加属性李># 6 楼答案
事实上,当你的网速很慢时就会出现错误,所以尽量延长超时时间,这样你的代码肯定会像我一样工作