gpt4 book ai didi

java - Tomcat 连接超时是否会向 HTTP 客户端触发 500?

转载 作者:行者123 更新时间:2023-11-28 22:51:35 25 4
gpt4 key购买 nike

在我的设置中,我间歇性地看到一些错误,如下所示:

2016-07-07 12:22:04,248 ERROR  [com.biltz.krieg.endpoints.controllers.ControllerBase] (http-nio-8080-exec-25) Caught Exception:
java.io.EOFException: Unexpected EOF read on the socket
at org.apache.coyote.http11.InternalNioInputBuffer.fill(InternalNioInputBuffer.java:152)
at org.apache.coyote.http11.InternalNioInputBuffer$SocketInputBuffer.doRead(InternalNioInputBuffer.java:177)
at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:110)
at org.apache.coyote.http11.AbstractInputBuffer.doRead(AbstractInputBuffer.java:413)
at org.apache.coyote.Request.doRead(Request.java:460)

这些错误的时间与显示以下内容的访问日志一致:

[07/Jul/2016:12:36:36] 172.31.2.246 POST /v1/blitz 500 59.499 133
[07/Jul/2016:12:37:29] 172.31.2.246 POST /v1/blitz 500 59.186 133
[07/Jul/2016:12:39:41] 172.31.2.246 POST /v1/blitz 500 59.889 133

上面的有趣之处在于,每个从服务器触发 500 的请求都需要大约 60 秒才能得到处理。

60 秒是 Tomcat 连接超时的配置方式:

 <Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="60000"
redirectPort="8443" />

所以它似乎真的与这个超时有关,但我不明白为什么关于连接超时的文档是这样说的

The number of milliseconds this Connector will wait, after accepting a connection, for the request URI line to be presented. Use a value of -1 to indicate no (i.e. infinite) timeout. The default value is 60000 (i.e. 60 seconds) but note that the standard server.xml that ships with Tomcat sets this to 20000 (i.e. 20 seconds).

以上对我来说意味着在超时发生后,TCP/HTTP 连接将在不发送任何内容的情况下关闭。我错了吗?

Tomcat 连接超时是否会向 HTTP 客户端触发 500?

最佳答案

您是否使用 Apache 作为 Tomcat 的前端?我遇到了类似的问题,在 Apache 配置中调整超时解决了问题。

具体来说,我在 CentOS 6.6 虚拟机上运行 Tomcat 6.0.24,并通过 Apache 2.2.15 从端口 80 重定向传入请求。我在我的 Apache 配置文件 (/etc/httpd/conf/httpd.conf) 中调整了这一行:

#
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 60

默认值显然是 60 秒。我把它增加到 120 秒。这解决了我的问题。

澄清一下,我没有像您提到的那样修改 Tomcat 配置文件 (/etc/tomcat6/server.xml) 中的 元素。我将其保留为默认值,这对于 Tomcat 的发行版本显然是 20 秒:

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />

这意味着我收到的 500 个错误(可能也是您的)不是由该超时引起的。特别是,虽然我在这里将我的 Tomcat 超时设置为默认的 20 秒,但我的服务已经超过一分钟并且仍然返回良好的响应。如果他们超过 60 秒,只有 Apache 配置会杀死他们。

关于java - Tomcat 连接超时是否会向 HTTP 客户端触发 500?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38248934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com