本文是专题:建站日记中的第7篇,共12篇

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到自己能承受的值。

专题导航前一篇后一篇