影响此“非活动超时”的唯一因素似乎是
<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网络,因此它们是“预期的”超时/切断的连接(通过具有不同名称LOL的配置)。



