这超时指令的文档在 apache 中指出:
当向客户端写入数据时,如果发送缓冲区已满,则等待数据包确认的时间长度。
但是,如果 TCP 堆栈未收到并确认,它将重新发送数据包。那么这两件事如何相互作用?apache 超时是否在中止连接之前设置了重试的总体限制?
背景是 curl pull 周期性失败并出现错误的情况:
curl:(18)传输已关闭,剩余 XXXXXX 字节需要读取
我正在尝试找出确切的原因。
在客户端和服务器上都进行了 Wireshark 跟踪后,似乎服务器 (apache) 出于某种原因过早终止了会话(因此不是防火墙或其他原因强制关闭)。这种情况发生在两种经常下载的文件上:大型二进制文件(100 mb mp4)和小型文本文件(~10kb)。对于大型文件,有一条 apache 日志消息:
指定的超时已过期:[客户端:] AH01581:将 URI /xxxx/xxxx/xxxx/ 的数据写入客户端时超时
我目前最好的猜测是,这只是网络拥塞,因为故障往往在某些时候聚集在一起,但如果可能的话,我想进一步确定它。
配置:
CentOS 6.6
Apache 2.4.16
Curl 7.19.7