在apache中超时指令的文档指出:
向客户端写入数据时,如果发送缓冲区已满,则等待数据包确认的时间长度。
但是如果TCP栈没有收到ACK,它将重新发送数据包。 那么这两件事如何相互作用呢? 在中止连接之前,apache超时是否设置了重试的总体限制?
上下文是一个curl拉的周期性失败,错误的情况:
curl:(18)传输closuresXXXXXX剩余的字节读取
我试图确定确切的原因。
在客户端和服务器端都使用Wireshark跟踪,似乎服务器(apache)由于某种原因提前终止会话(所以不是防火墙或其他的强制closures会话)。 这是经常下载的两种types的文件:大二进制文件(100MB mb)和小文本文件(~10kb)。 对于大文件有一个Apache日志消息:
指定的超时已过期:[client:] AH01581:向客户端写入URI / xxxx / xxxx / xxxx /的数据时超时
我目前最好的猜测是,这只是networking拥塞,因为在某些时候,失败往往会聚集在一起,但是如果可能的话,我想尽可能地把它们放在一起。
组态:
CentOS 6.6
Apache 2.4.16
curl7.19.7