区分哪个模式:
apachectl -l
先说prefork,这个用的是多进程模式,总所周知,多进程的优点就是应该就是稳定性,各个进程独立,相互不受影响,缺点就就是过于资源消耗过大。然后说说他的配置:
<IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 250 MaxConnectionsPerChild 0 </IfModule>
startservers:因为prefork预先产生子进程的,就是说服务开始后,就会自动生成子进程,这样能够节省时间吧,有些说法就是可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能,而后的数字就是其预先生成的子进程数量。
minspareservesr:这个是最少预备进程,就是说服务开启后,必须保持这个最少进程数,即使实际进程没那么多;
maxspareservers:这个是最多预备进程,进程数不能超过这个数量,否则将会自动杀掉一些进程,保持规定的最大数量。
maxrequestworkers:设置服务器可以同时处理的最大请求数,缺省是150,而apache默认最大是256,这个可以根据( ps -ef|grep http|wc -l )得出的结果来参考,要是结果大于设置值,那么就要进行请求排队,这就是资源尚有,但http访问却很慢的原因;注:apache2.312之前,此项称为:maxclient;;
maxconnectsperchild:设置每个进程的最大连接数,缺省为零,则表示不设上限。
然后说worker模式,这是个混合品种,之所以这样说是因为它使用的是多进程、多线程混合模式,这个优点是显而易见的内存占用量少,适合于流量大的HTTP服务,缺点就是要是某个线程内存崩溃,那么可能回影响真个进程。然后说说配置:
<IfModule mpm_worker_module> StartServers 3 MinSpareThreads 75 MaxSpareThreads 250 ThreadsPerChild 25 MaxRequestWorkers 400 MaxConnectionsPerChild 0 </IfModule>
worker的设置项跟prefork的设置项差不多,其相同的设置项所表达的作用是一样的,我只说不一样的,
startservers:同上;
minsparethreads:这个设置的是最少的线程数,并且会一直保持在这个线程数,startserver自动生成;
maxsparethreads:这个设置的是最大的线程数,不能超过这个线程数,否则会被杀掉哦;
threadperchild:这个每个子进程下所固定的线程数量,每个子进程互相独立哦;缺省 64,如果负载较大,64也是不够的。这时要显式使用 ThreadLimit指令,它的最大缺省值是20000
maxrequestworkers:设置最大请求数,这个数值要大于 得数是由子进程总数乘以每个子进程下线程数得出,缺省最大子进程为16,是不够的。这时要显式使用 ThreadLimit指令,它的最大缺省值是20000。
maxconnectsperchild:设置每个进程的最大连接数,缺省为零,则表示不设上限。
最后event,这个真心不熟悉,听说还是实验用品,所以暂且不折腾!
因为之前一直使用的window,所以这个比较熟悉,这个是针对window nt优化的多路处理模块,就是一个父进程产生一个子进程,然后再这个子进程内轮流产生多个线程来处理请求。也就是说他只有两个线程。说说配置
<IfModule mpm_winnt.c> ThreadsPerChild 250 MaxRequestsPerChild 5000 </IfModule>
这个配置比较少啊,
threadperchild:这个是设置子进程下的线程数量,因为他只有一个进程,所以这个数值得足够大,但也不能太大,该参数以服务器的响应速度为准的, 数目太大的反而会变慢。缺省是49,最大值为1920,视服务器配置而定。
maxrequestsperchild:即是进程同时处理最大的请求数,若设为零则表示无上限,但建议不设为零,放置内存溢出、减轻服务器负担。这个还是要看服务器配置如何,要是内存足够的话,设为零也不足为道也!