Apache优化限制内存占用,防止当机
Linux Apache服务器架构应该以稳定著称, 前一篇日志提到有人抱怨soso spider把自己的网站搞死了,这个其实不能全怪spider.想想看,如果有足够多的用户,正常访问网站,人多的像soso的spider一样,apache也不可能挂了? 关键在于Apache配置, 以及配置之后一定要进行压力测试.。
先说说配置, 第一是不要加载不必要的apache模块, 这样可以限制每个进程的内存占用量(对prefork而言,worker没用过,因为php的原因). 然后就要注意下面这个性能配置部分。
View Code MYSQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <ifmodule prefork.c=""> # number of server processes to start # http://httpd.apache.org/docs/2.2/mod/mpm_common.html#startservers # 服务器启动时,产生的服务进程 StartServers 8 # minimum number of server processes which are kept spare # http://httpd.apache.org/docs/2.2/mod/prefork.html#minspareservers # 系统空闲态,至少要保留的服务进程数,也就是相当于,饭店里没人吃饭,也要至少站6个服务员等顾客来 MinSpareServers 6 # maximum number of server processes which are kept spare # http://httpd.apache.org/docs/2.2/mod/prefork.html#maxspareservers # 系统空闲态,至多保留的服务进程数,也就是相当于,饭店里要是没有顾客,数一数站着没事的服务员,多于10个的话,就是让他们放假回家. MaxSpareServers 10 # highest possible MaxClients setting for the lifetime of the Apache process. # http://httpd.apache.org/docs/2.2/mod/mpm_common.html#serverlimit # 服务器允许配置的进程数上限,设置了MaxClients最大允许配置的数值.必须重启服务器才生效的值. ServerLimit 40 # maximum number of server processes allowed to start # http://httpd.apache.org/docs/2.2/mod/mpm_common.html#maxclients # 服务器允许连接的进程数上限,也就是饭店里正常情况下最大允许进入的人数.此值不需要重启服务器即可修改生效,但不能超过ServerLimit,及时配置超过,也只能最大运行ServerLimit个进程. MaxClients 20 # maximum number of requests a server process serves # http://httpd.apache.org/docs/2.2/mod/mpm_common.html#maxrequestsperchild MaxRequestsPerChild 10000 </ifmodule> |
关于其他参数,就搜索一下吧,我就不再重复了.
关键在于,一定要测试自己服务器的负载,是不是能承受的住最糟糕的情况. 使用命令:
ab2 –n 1000 –c 100 http://yourdomain.com/index.php
这条命令模拟并发连接数为100的情况,而上面的配置最大只允许20个并发,所以有一些请求会在队列里等待服务,但不会耗光你的内存。你可以尝试加大自我攻击的力度,如果服务器在这样糟糕的情况下还能剩余一些内存,系统就肯定不会崩溃。 请注意,这里说的内存是物理内存,别把swap算进来。一旦用上swap,因为硬盘的速度和内存无法相提并论,造成服务器的响应就会非常慢。这时候应该减小MaxClients到自己能承受的值。