在任何默认安装中,Apache 2都会closureskeepAlive,但在另一台服务器上,keepAlive模块已打开。
那么,我怎么知道keepAlive是否适合我? 我在哪里可以find关于configuration这个好的例子?
已经有两个很好的答案,但也许最重要的现实生活中没有提到。
首先,OP可能需要阅读前面的两个答案和这个小博客 ,了解Keepalive是什么。 (作者没有详细说明TCPI / IP越来越“快”,连接打开的时间越长,这种情况的确如此,长时间的连接从IP窗口缩放中受益,但是除非文件是大,或者带宽延迟产品exception大)。
使用Apache时,对HTTP Keepalive的争论就是阻止Apache进程。 也就是说,使用Keepalive的客户端将阻止“他的”Apache进程为其他客户端服务,直到客户端closures连接或达到超时。 在同样的时间内,这个Apache实例可能已经服务了许多其他的连接。
现在,一个非常常见的Apacheconfiguration是Prefork MPM和一个PHP / Perl / Python解释器,以及上述语言中的应用程序代码。 在这种情况下,每个Apache进程都是“重”的,因为它占用了几兆字节的RAM(与解释器和应用程序代码链接的Apache)。 这和每个keepalive的Apache实例的阻塞一起是效率低下的。
常见的解决方法是使用2台Apache服务器(根据需要在同一台物理服务器上或2台服务器上)使用不同的configuration:
然后,您可以在需要时扩展dynamic和静态内容的分离,例如:
避免阻塞Apache的另一个方法是使用负载均衡器和更聪明的连接处理,比如Perlbal 。
.. 以及更多。 🙂
Keepalives在某些情况下可能会很好,但在其他情况下会很糟糕。 它们减less了build立一个新连接的时间和精力,但是在keepalive超时期间它们占用了服务器资源。 例子:
正如您所看到的,KeepAliveTimeout在优化服务器性能方面也扮演着重要的angular色。
看看你的使用模式,并自己决定。
你一定要使用KeepAlive On。
看到:
http://httpd.apache.org/docs/2.0/mod/core.html#keepalive
这样一个单独的TCP连接将被浏览器重新使用来发送多个查询。 通常一个网站有很多组件(HTML页面,JavaScript代码,图片)。 只要这些资源在同一个域中,因此可以由同一个服务器来服务,因为浏览器不需要build立一个新的TCP连接,所以一个KeepAlive连接会大大提高性能。
浏览器通常打开3个并行连接到一个域。 所以假设你的网站有18个对象。 浏览器将打开3个连接,每个连接下载6个对象 – 使用KeepAlive模式。 如果没有KeepAlive,它将不得不打开18个TCP连接,这是非常缓慢的。
大多数或所有现代浏览器都符合HTTP / 1.1标准,所以这应该是正常的。
像squid这样的某些HTTP代理不符合HTTP / 1.1规范,但是它们仍然要求使用KeepAlive连接。