影响此“非活动超时”的唯一因素似乎是
<Connector port="8080" ... connectionTimeout=30000 />设置。
并且仅当它试图将数据“主动发送”到线路上时(但不能,因为客户端正在主动拒绝它,或者连接丢失了)。如果servlet只是忙于在后台执行cpu,然后写入线路(并且它已被内核接收或缓冲),没问题,它可以超过connectionTimeout,所以不是this。
我的直觉是Tomcat似乎有一个“内置”(未记录?无法单独指定?)写超时设置,默认为connectionTimeout值,例如(从tomcat来源随机选择):
java/org/apache/tomcat/util/net/NioEndpoint.java625: ka.setWriteTimeout(getConnectionTimeout());
现在,这是否是“不好的”尚待解释。在TCP通道以某种方式被中断(足以停止传输)或客户端在接收到字节时“阻塞”
FWIW之后,就会发生此错误,这是由tomcat造成的连接“断开” …
FWIW connectionTimeout设置影响很多事情:
The total amount of time it takes to receive an HTTP GET request.The total amount of time between receipt of TCP packets on a POST or PUT request.The total amount of time between ACKs on transmissions of TCP packets in responses.
现在显然也是writeTimeout。
最终结果:我们拥有一个flakey网络,因此这些超时是“预期的”超时。



