apache MPM介绍?
虽然理论上这个值越大,可以处理的请求就越多,但Apache默认的限制不能大于256。如果把这个值设为大于256,那么Apache将无法起动。事实上,256对于负载稍重的站点也是不够的。在Apache 1.3中,这是个硬限制。如果要加大这个值,必须在“configure”前手工修改的源代码树下的src/include/httpd.h中查找256,就会发现“#define HARD_SERVER_LIMIT 256”这行。把256改为要增大的值(如4000),然后重新编译Apache即可。在Apache 2.0中新加入了ServerLimit指令,使得无须重编译Apache就可以加大MaxClients。下面是笔者的prefork配置段: Linux代码 http://leeyin.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf http://leeyin.iteye.com/images/icon_star.png[*]
[*]StartServers 10
[*]MinSpareServers 10
[*]MaxSpareServers 15
[*]ServerLimit 2000
[*]MaxClients 1000
[*]MaxRequestsPerChild 10000
[*]
上述配置中,ServerLimit的最大值是20000,对于大多数站点已经足够。如果一定要再加大这个数值,对位于源代码目录下
/httpd-2.2.15/server/mpm/prefork/prefork.c中以下两行做相应修改即可:
Linux代码 http://leeyin.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf http://leeyin.iteye.com/images/icon_star.png
[*]#define DEFAULT_SERVER_LIMIT 256
[*]#define MAX_SERVER_LIMIT 20000
worker的工作原理是,由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients设置了所有子进程中的线程总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。
MinSpareThreads和MaxSpareThreads的最大缺省值分别是75和250。这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节。
ThreadsPerChild是worker MPM中与性能相关最密切的指令。ThreadsPerChild的最大缺省值是64,如果负载较大,64也是不够的。这时要显式使用ThreadLimit指令,它的最大缺省值是20000。上述两个值位于源码树server/mpm/worker/worker.c中的以下两行:
Linux代码 http://leeyin.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf http://leeyin.iteye.com/images/icon_star.png
[*]#define DEFAULT_THREAD_LIMIT 64
[*]#define MAX_THREAD_LIMIT 20000
这两行对应着ThreadsPerChild和ThreadLimit的限制数。最好在configure之前就把64改成所希望的值。注意,不要把这两个值设得太高,超过系统的处理能力,从而因Apache不起动使系统很不稳定。
Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxClients。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时也需要显式声明ServerLimit(最大值是20000)。这两个值位于源码树server/mpm/worker/worker.c中的以下两行:
Linux代码 http://leeyin.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf http://leeyin.iteye.com/images/icon_star.png
[*]#define DEFAULT_SERVER_LIMIT 16
[*]#define MAX_SERVER_LIMIT 20000
需要注意的是,如果显式声明了ServerLimit,那么它乘以ThreadsPerChild的值必须大于等于MaxClients,而且MaxClients必须是ThreadsPerChild的整数倍,否则Apache将会自动调节到一个相应值(可能是个非期望值)。下面是笔者的worker配置段:
Linux代码 http://leeyin.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf http://leeyin.iteye.com/images/icon_star.png
[*]
[*]StartServers 3
[*]MaxClients 2000
[*]ServerLimit 25
[*]MinSpareThreads 50
[*]MaxSpareThreads 200
[*]ThreadLimit 200
[*]ThreadsPerChild 100
[*]MaxRequestsPerChild 0
[*]
页:
[1]