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

时间:2016-07-07 15:03:28

标签: java http tomcat

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

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" />

所以这似乎与此超时有关,但我不明白为什么有关连接超时的文档说明了这个

  
    

此连接器在接受连接后将等待呈现请求URI行的毫秒数。使用值-1表示没有(即无限)超时。默认值为60000(即60秒),但请注意Tomcat附带的标准server.xml将其设置为20000(即20秒)。

  

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

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

1 个答案:

答案 0 :(得分:1)

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

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

Executor

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

为了清楚起见,我没有修改&lt; Connector&gt;我提到的Tomcat配置文件(/etc/tomcat6/server.xml)中的元素。我把它保留为默认值,对于Tomcat的发布版本来说显然是20秒:

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

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