Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。
市场上 的大部分Web服务器,包括iPlanet、IIS和Apache,都支持HTTP Keep-Alive。对于提供静态内容的网站来说,这个功能通常很有用。
但是,对于负担较重的网站来说,这里存在另外一个问题:虽然为客户保留打开的连 接有一定的好处,但它同样影响了性能,因为在处理暂停期间,本来可以释放的资源仍旧被占用。当Web服务器和应用服务器在同一台机器上运行时,Keep- Alive功能对资源利用的影响尤其突出。
此功能为HTTP 1.1预设的功能,HTTP 1.0加上Keep-Alive header也可以提供HTTP的持续作用功能。
Keep-Alive: timeout=5, max=100
timeout:过期时间5秒(对应httpd.conf里的参数是:KeepAliveTimeout),max是最多一百次请求,强制断掉连接
就是在timeout时间内又有新的连接过来,同时max会自动减1,直到为0,强制断掉。见下面的四个图,注意看Date的值(前后时间差都是在5秒之内)!
关闭keep-alive的方法:
1. nginx 的keep alive关掉,这个默认是打开的,而且是75秒.很折磨nginx性能.
在http块中加入:
keepalive_timeout 0;
2. apache中
KeepAlive Off
长连接的有效期.
在服务器与浏览器上都有长连接的有效时间设置,
比如ie7超时时间为1分钟.
比如在apache中可以 KeepAliveTimeout 30 #这个30是秒.
浏览器与服务器的超时时间可能不一样,在实际中以短的那个为准.
优势
在请求大量小文件的时候,长连接的有效使用可以减少重建连接的开销.
缺点:
当长连接时间过长,比如60s,即使是浏览器没有任何请求,服务器仍然会维护着该浏览器的连接,一旦用户很多,对apache而言,就是需要维护大量的空闲进程.而对使用线程的轻量级web服务器如nginx,会由于超时时间过长而使资源无效占有而引发的损失,已超过了由于重复连接而造成的损失..
转载于:https://blog.51cto.com/8118556/1320850