如何更好的控制apache的内存

http://hi-it.org/751.html

本来以为一台服务器挂几个网站,还能做他用。可是随着网站访问量的不断增加,web服务所占用的资源是越来越多,以至于最后往往是服务器内存爆满,然后死机,不得不重启服务器。这种事情发生之后,对网站极其不利,网站的SEO,流量都带来负面影响。所以不得不考虑升级服务器,这又需要一部分资金的投入。对于中小站长,升级服务器的投入产出比是很关心的问题,所以不到万不得已,服务器升级就是一个很纠结的问题。不过在不得不升级服务器之前,其实还有很多的工作可以做,从apache本身的配置上来对内存进行优化,进而能够提高服务器的性能。

优化的目的其实就是让内存瞬间爆满的概率降至最低。内存爆满之后,服务器就很容易死机,web服务本身就是一个动态调节的状态,只要保证瞬时不达到内存的爆满,服务器就很难遇到死机。当然,随着网站访问量的增加,这种优化的效果也越来越受到局限,到最后,服务器真的扛不住了,那时候,升级服务器是必须的事情了。

其实修改几个重要的参数,就可以实现对apache占用内存的优化。

就拿我的博客所在服务器为例吧,优化之前,内存经常在爆满的边缘,剩余内存不过几M而已。晚上访问高峰的时候,服务器非常轻易的挂掉。

优化之后的结果,请看:

68900 free,当然这是一个动态的,往往在10M到120M之间浮动,这是一个非常理想的优化的结果,内存爆满的概率被降得很低了。

我们来修改apache的配置文件:

首先修改Timeout 这一项,默认是120,我修改为了50,这样就可以让无收发数据的连接及时中断,避免占用资源。120秒改成50秒效果还是很明显。

若网站图片类等静态页面比较多,开启KeepAlive 是一个不错的选择,避免访问者多次建立连接,占用资源。我设置了开启。

若开启了KeepLive,那么MaxKeepAliveRequests 不要设置的太大,根据网站的访问量,设置20到100都可以。KeepAliveTimeout时间可以设置为较短的时间,若访问量很大的话。一般5到50都可以。

下面这个参数修改也很重要,把MaxRequestsPerChild 改小,默认可能是4000,现在改为50。旨在限制子线程的并发数,这样可以有效控制线程占用的资源。当然不要设置的太小,否则开启新的主线程也是一个占用资源的事情。

经过这么一番折腾,重启web服务,效果立竿见影。

在不得不升级服务器硬件之前,这么做还可以维持一段时间,若真的有一天了,服务器扛不住了,那就得升级了。升级以后的下一次升级之前,依然可以这么优化。

你可能感兴趣的:(linux)