1、Keep-Alive:
1)早期每个http请求都需要打开一个tcp socket连接,使用一次后就断开,使用keep-alive,可以解决这个问题,即在一次tcp连接中可以持续发送多份数据而不会断开连接,以减少tcp的连接次数,提高性能(由httpd自动关闭tcp连接,减少TIME_WAIT状态连接)和httpd的吞吐率(更少的系统内核调用和更少的socket的accept和close函数调用)
2)Keep-alive timeout:然后长期的tcp连接,容易造成系统资源无效占用,有时比重复利用连接带来的损失更大,所以需要正确设置keep-alive timeout(一个http产生的tcp链接在传送完最后一个响应后,还需要hold住keepalive_timeout秒后,才关闭这个连接)
3)tcp keep-alive:http keep-alive是为了让tcp存活的时间久一点,以便于在一个连接上传送多个http,提高socket的利用率。而tcp keep-alive是TCP的一种检测tcp连接状况的保鲜机制(支持三个系统内核参数,tcp_keepalive_time、tcp_keepalive_intvl、tcp_keepalive_probes):闲置了tcp_keepalive_time后,服务器开始向客户端发送侦测包,以判断tcp连接情况;如果没有收到ack,则会在tcp_keepalive_intvl后再次发送侦测包,知道收到ack为止;如果一直没有收到ack,会尝试tcp_keepalive_probes次,依然没有收到对方的ack包,就会丢弃这个tcp连接。tcp闲置时间默认为2h,一般设置为30min