(转载:www.idcew.com) 如果你一直在努力解决网络服务器变慢或崩溃的问题,你可能会遇到一个叫做“Keepalive”的Apache设置。这是apache最强大的功能之一,并且经常被误用。在本文中,我们将解释:
什么是Apache Keepalive /Keepalive timeout? 最佳服务器性能的最佳配置是什么? 如果设置不正确/保留默认值,会发生什么情况?
什么是Apache Keepalive ?
为了更好地理解,把你的网络服务器想象成一个坐下来的餐馆。您的网站访问者是客户,服务器软件是员工。服务器软件有“服务器插槽”,你可以把它想象成可以处理请求的员工。就像一个企业不能有无限的员工一样,你的网络服务器也只能有这么多的“插槽”,因为每一个占用内存和处理器时间。
然而,你的顾客可能比你的员工多得多,因为每个顾客只在他们来访的特定时间需要帮助——当他们点菜、付账时,等等。同样,你可以拥有比你的“服务器插槽”更多的网站访问者,因为大多数时候,你的访问者都在阅读你的网站,看图片,等等。更不用说,他们是在点击什么东西来请求一个新页面。
那么“Keepalive”在这里是从哪里来的?想象一下在 餐馆。你的服务员会问你想要什么,写下每一项,只有在你点完菜后才会离开。你的服务员不会简单地在你要的每一件东西后回到厨房给你点菜——那会非常低效!与此同时,如果你在决定你想要什么方面有困难,一旦你决定了,服务器将会提供回来——他们不会简单地永远等你决定你想要的一切。
Keepalive和Keepalive timeout此非常相似。网页是由许多不同的东西组成的,这些东西是你的网页浏览器必须要求的。有许多文件由文本、格式信息、广告、图像和视频组成。如果没有keepalive,您的web浏览器将需要为这些请求中的每一个“标记”服务器。这可以极大地减缓事情的发展。如果没有空闲插槽,等待的时间可能会更长。相反,keepalive允许你的网络浏览器只“标记”服务器一次,然后一个接一个地请求许多不同的文件和图像。当浏览器停止要求新的东西时,网络服务器会释放出“空间”给其他访问者使用。keepalive超时规定了在网络浏览器停止请求新东西后,插槽将保持被占用的时间。
希望这能给你一个概念什么是Keepalive,以及Keepalive timeout代表什么:它是一个用户的网络浏览器集中精力处理少量服务器“插槽”中的一个的时间量。
最佳服务器性能的最佳配置是什么?
简短的回答是:
应该打开“Keepalive” Keepalive timeout应设置为1秒 Keepalive请求应该是100个或更多。无限制通常是可以的。 就像服务器不会等一个小时让你决定甜点一样,像Apache这样的网络服务器也不会等无限长的时间让你的网络浏览器要求新的文件或图像。不幸的是,标准/默认等待时间太长。
单个网页通常由几十个文件或图像组成,加载需要几秒钟。网络服务器接收和处理单个请求(比如加载单个图像)所需的时间通常不到1/10秒。keepalive timeout是一个倒计时计时器,每次网络浏览器请求新项目时都会重置。只要浏览器继续要求更多的东西,超时就不会过期,即使keepalive timout设置为1秒。
但是,Apache Keepalive timeout的默认设置是15秒。用计算机术语来说,这是永恒的。如果加载一个网页需要2秒钟,那么,该槽将激活2秒钟,服务请求,然后再等待15秒钟,等待用户是否需要其他东西。如果用户在这15秒内没有点击任何东西或者尝试加载新的东西,这个槽就不能为任何访问者做任何有用的工作。如果你足够幸运地得到了这些珍贵的插槽中的一个——并抓住它——你可能会以这种方式将你的第二页加载快1/10秒。这是因为您不需要打开到服务器的新连接,这需要很少的时间。但这是以首先必须等待很长时间才能访问一个插槽为代价的——很有可能,所有的插槽都被“用于”防止其他空闲用户访问。
这就像一个服务员在送完你的食物后,等了15分钟,看看你是否还需要什么,然后再去帮助别人。即使1分钟(对于服务员)或1秒钟(对于网络服务器)都比需要的时间长,但至少这不会是一场彻底的灾难。即使Keepalive timeout为1秒(您可以设置的最小值),也几乎可以保证网页浏览器在加载页面的整个过程中能够保持相同的连接插槽。几乎没有理由设置比1秒更长的持续时间。
当keepalive设置不正确或保留默认值时会发生什么?
一句话:灾难。
想象一下,我们的服务员放下你的食物,然后在做任何其他工作之前等了15分钟。通常,这将导致餐馆(或网络服务器)停止运转。没有人能够叫服务员来点菜。现成的食物会变冷,等着被拿走。
假设餐馆经理通过安排更多的服务员在那天工作来解决这个问题。这有一个双重问题。第一,这很贵。第二,餐厅、停车场、休息室等没有足够的物理空间来容纳一台服务器。服务员和工作人员在去任何地方的时候都会被对方绊倒,如果服务员每次只帮一张桌子的话,他们就不会从小费中得到什么。
对于网络服务器来说,情况并没有太大的不同。如果您增加连接插槽的数量来处理这个问题,您将很快面临严重的问题。每个连接插槽都使用ram。同样的用户需要更多的插槽,你的服务器很容易耗尽内存而崩溃。同样,计算机也有一个叫做“上下文切换”的问题。简单地说,每个插槽都是一个程序,从一个程序切换到另一个程序对计算机来说是一个昂贵的操作。如果你需要运行1000个程序,而不是200个,那么在它们之间切换所花费的时间开始比这些程序花在实际工作上的时间占用更多的处理器时间。这可能是一个非常严重的问题,即使您有足够的ram和处理性能。
看看我们之前的例子:一个网页需要2秒钟来加载。
在一个场景中,保持1秒,然后,给定的槽工作2秒,空闲1秒。每浏览一页总共需要3秒钟。
在第二种情况下(默认配置),保持15秒,然后,给定的插槽工作2秒,闲置15秒。每个页面的浏览时间总共为17秒。
这几乎是给定数量的访问者访问您的网站所需的连接插槽数量的6倍!这意味着6倍的内存,6倍的上下文切换。这很容易使网络服务器崩溃。或者,如果您对Apache可以创建的连接插槽数量设置了一个足够低的限制,那么您就有了一个不同的问题:访问者必须等待一段可笑的时间才能浏览您的网站,尽管服务器有相当多的空闲的中央处理器容量来处理额外的访问者。
最终结果非常简单——将Apache Keepalive timeout保持在默认的15秒,将使用6倍于将其设置为1秒的内存。同时,即使你有足够的内存,对用户也没有好处。最后,网站的可靠性和任何网站服务器的性能,即使是中等数量的访客,将受到严重伤害。
如果您错过了,以下是Apache Keepalive和Keepalive timeout的最佳设置:
应该打开“Keepalive” Keepalive timeout应设置为1秒 Keepalive请求应该是100个或更多。无限制通常是可以的。 编辑:Apache的默认Keepalive timeout现在似乎是5秒,不再是15秒,至少在cPanel中是这样。因此,让它处于违约状态的问题规模比过去小了。即便如此,5秒的默认值也不是最佳值。1秒仍然是最佳的Keepalive timeout设置。
(转载:www.idcew.com) |