在http早期 ,每一个http请求都要求打开一个tpc socket链接,而且使用一次以后就断开这个tcp链接。nginx
使用keep-alive能够改善这种状态,即在一次TCP链接中能够持续发送多份数据而不会 断开链接。经过使用keep-alive机制,能够减小tcp链接创建次数,也意味着能够减小TIME_WAIT状态链接,以此提升性能和提升httpd 服务器的吞吐率(更少的tcp链接意味着更少的系统内核调用,socket的accept()和close()调用)。可是,keep-alive并非 免费的午饭,长时间的tcp链接容易致使系统资源无效占用。配置不当的keep-alive,有时比重复利用链接带来的损失还更大。因此,正确地设置 keep-alive timeout时间很是重要。web
Httpd守护进程,通常都提供了keep-alive timeout时间设置参数。好比nginx的keepalive_timeout,和Apache的KeepAliveTimeout。这个 keepalive_timout时间值意味着:一个http产生的tcp链接在传送完最后一个响应后,还须要hold住 keepalive_timeout秒后,才开始关闭这个链接。当httpd守护进程发送完一个响应后,理应立刻主动关闭相应的tcp链接,设置 keepalive_timeout后,httpd守护进程会想说:”再等等吧,看看浏览器还有没有请求过来”,这一等,即是 keepalive_timeout时间。若是守护进程在这个等待的时间里,一直没有收到浏览发过来http请求,则关闭这个http链接。浏览器