首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java.net.SocketTimeoutException:在Tomcat下读出超时

java.net.SocketTimeoutException:在Tomcat下读出超时
EN

Stack Overflow用户
提问于 2013-06-13 04:30:40
回答 8查看 507.1K关注 0票数 81

我有一个基于Tomcat的web应用程序。我间歇性地得到以下异常,

代码语言:javascript
运行
复制
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连接器→→属性。
  2. 客户端有一个读取超时集,并且服务器响应的时间比这个长。
  3. 我所经历的线程之一,说这可以发生在高度并发,如果保持活动是启用的。

对于#1,我设置的初始值是20秒,我将其设置为60秒,将进行测试,并查看是否有任何更改。

同时,如果你们中有人能提供专家意见的话,我会很有帮助的。或者因为这个问题,你能想到的任何其他原因都可能导致这个问题。

EN

回答 8

Stack Overflow用户

发布于 2013-06-13 05:45:31

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

对,是这样。

客户端有一个读取超时集,并且服务器响应的时间比这个长。

不是的。这会导致客户端超时。

我所经历的线程之一,说这可以发生在高度并发,如果保持活动是启用的。

这显然是猜测,而且完全不正确。当并且只有在超时期间没有数据到达时才会发生这种情况。句号。负载、保持活动和并发性与此无关。

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

票数 55
EN

Stack Overflow用户

发布于 2018-09-19 13:10:00

以下是基本说明:-

  1. 在Tomcat的基本目录(即server.xml)下的"conf“文件夹中找到”%CATALINA_HOME%/conf/server.xml“文件。
  2. 在编辑器中打开文件并搜索<Connector
  3. 找到正在超时的相关连接器--这通常是HTTP连接器,即带有protocol="HTTP/1.1"的连接器。
  4. 如果在连接器上设置了一个connectionTimeout值,它可能需要增加--例如,从20000毫秒(= 20秒)增加到120000毫秒(= 2分钟)。如果连接器上没有设置connectionTimeout属性值,则默认值为60秒--如果不够,则可能需要添加该属性。
  5. 重启Tomcat
票数 8
EN

Stack Overflow用户

发布于 2019-03-05 15:09:32

代码语言:javascript
运行
复制
Connection.Response resp = Jsoup.connect(url) //
                .timeout(20000) //
                .method(Connection.Method.GET) //
                .execute();

实际上,当你的互联网速度慢时,错误就会发生,所以尽量延长超时时间,然后你的代码就一定会工作,因为它对我是有效的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17079273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档