�l��r�g:August 21, 2008 分�:Apache
《Apache Server Status解�x之Logging》
《Liunx下查看服�掌餍阅�》
prefork模式
�@��多路�理模�K(MPM)���F了一��非�程型的、�A派生的web服�掌鳎�它的工作方式�似於Apache 1.3。它�m合於�]有�程安全�欤�需要避免�程兼容性���}的系�y。它是要求�⒚���求相互��立的情�r下最好的MPM,�@�尤粢���求出�F���}就不��影�到其他�求。
�@��MPM具有很��的自我�{�能力,只需要很少的配置指令�{整。最重要的是��MaxClients�O置�橐��足�虼蟮�抵狄蕴�理��在的�求高峰,同�r又不能太大,以致需要使用的�却娉�出物理�却娴拇笮 �
worker模式
此多路�理模�K(MPM)使�W�j服�掌髦С只旌系亩嗑�程多�M程。由於使用�程�硖�理�求,所以可以�理海量�求,而系�y�Y源的�_�N小於基於�M程的MPM。但是,它也使用了多�M程,每���M程又有多���程,以�@得基於�M程的MPM的�定性。
控制�@��MPM的最重要的指令是,控制每��子�M程允�S建立的�程�档�ThreadsPerChild指令,和控制允�S建立的��程�档�MaxClients指令。
prefork和worker模式的切�Q
1.���前的prefork模式��游募�改名
mv httpd httpd.prefork
2.��worker模式的��游募�改名
mv httpd.worker httpd
3.修改Apache配置文件
vi /usr/local/apache2/conf/extra/httpd-mpm.conf
找到�e�的如下一段,可�m��修改��d等��担�
<IfModule mpm_worker_module>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
4.重新��臃���
/usr/local/apache2/bin/apachectl restart
即可�Q成worker方式���apache2
�於�定性和安全性考�],不建�h更�Qapache2的�\行方式,使用系�y默�Jprefork即可。另外很多php模�K不能工作在worker模式下,例如redhat linux自�У�php也不能支持�程安全。所以最好不要切�Q工作模式。
prefork和worker模式的比�^
prefork模式使用多��子�M程,每��子�M程只有一���程。每���M程在某���_定的�r�g只能�S持一���B接。在大多�灯教ㄉ希�Prefork MPM在效率上要比Worker MPM要高,但是�却媸褂么蟮枚唷�prefork的�o�程�O�在某些情�r下�⒈�worker更有���荩核�可以使用那些�]有�理好�程安全的第三方模�K,�K且��於那些�程�{�困�y的平台而言,它也更容易�{�一些。
worker模式使用多��子�M程,每��子�M程有多���程。每���程在某���_定的�r�g只能�S持一���B接。通常�碚f,在一��高流量的HTTP服�掌魃希�Worker MPM是��比�^好的�x�瘢�因��Worker MPM的�却媸褂帽�Prefork MPM要低得多。但worker MPM也由不完善的地方,如果一���程崩��,整���M程就���B同其所有�程一起"死掉".由於�程共享�却婵臻g,所以一��程序在�\行�r必�被系�y�R�e��"每���程都是安全的"。
�的�碚f,prefork方式速度要稍高於worker,然而它需要的cpu和memory�Y源也稍多於woker。
prefork模式配置�解
<IfModule mpm_prefork_module>
ServerLimit 256
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 256
MaxRequestsPerChild 0
</IfModule>
ServerLimit
默�J的MaxClient最大是256���程,如果想�O置更大的值,就的加上ServerLimit�@����怠�20000是ServerLimit�@����档淖畲笾怠H绻�需要更大,�t必���gapache,此前都是不需要重新��gApache。
生效前提:必�放在其他指令的前面
StartServers
指定服�掌���r建立的子�M程�盗浚�prefork默�J��5。
MinSpareServers
指定空�f子�M程的最小�盗浚�默�J��5。如果��前空�f子�M程�瞪凫�MinSpareServers ,那�NApache�⒁宰畲竺棵胍��的速度�a生新的子�M程。此��挡灰��O的太大。
MaxSpareServers
�O置空�f子�M程的最大�盗浚�默�J��10。如果��前有超�^MaxSpareServers�盗康目臻f子�M程,那�N父�M程��⑺蓝囵N的子�M程。此��挡灰��O的太大。如果你�⒃�指令的值�O置�楸�MinSpareServers小,Apache���自��⑵湫薷某�"MinSpareServers+1"。
MaxClients
限定同一�r�g客�舳俗畲蠼尤胝�求的�盗�(����M程�K�l�程��),默�J��256。任何超�^MaxClients限制的�求都�⑦M入等候�列,一旦一���接被�放,�列中的�求�⒌玫椒��铡R�增大�@��值,你必�同�r增大ServerLimit。
MaxRequestsPerChild
每��子�M程在其生存期�仍试S伺服的最大�求�盗浚�默�J��10000.到�_MaxRequestsPerChild的限制後,子�M程����Y束。如果MaxRequestsPerChild��"0",子�M程�⒂肋h不���Y束。��MaxRequestsPerChild�O置成非零值有���好�:
1.可以防止(偶然的)�却��漏�o限�M行,�亩�耗�M�却妗�
2.�o�M程一��有限�勖�,�亩�有助於��服�掌髫��d�p�p的�r候�p少活�舆M程的�盗俊�
worker模式配置�解
<IfModule mpm_worker_module>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
StartServers
服�掌���r建立的子�M程�担�默�J值是"3"。
MaxClients
允�S同�r伺服的最大接入�求�盗�(最大�程�盗�)。任何超�^MaxClients限制的�求都�⑦M入等候�列。默�J值是"400",16(ServerLimit)乘以25(ThreadsPerChild)的�Y果。因此要增加MaxClients的�r候,你必�同�r增加ServerLimit的值。
MinSpareThreads
最小空�f�程��,默�J值是"75"。�@��MPM�⒒�於整��服�掌鞅O�空�f�程�怠H绻�服�掌髦锌�的空�f�程�堤�少,子�M程��a生新的空�f�程。
MaxSpareThreads
�O置最大空�f�程�怠D��J值是"250"。�@��MPM�⒒�於整��服�掌鞅O�空�f�程�怠H绻�服�掌髦锌�的空�f�程�堤�多,子�M程��⑺蓝囵N的空�f�程。MaxSpareThreads的取值���是有限制的。Apache��按照如下限制自�有拚�你�O置的值:worker要求其大於等於MinSpareThreads加上ThreadsPerChild的和。
ThreadsPerChild
每��子�M程建立的常�v的�绦芯�程�怠D��J值是25。子�M程在���r建立�@些�程後就不再建立新的�程了。
MaxRequestsPerChild
�O置每��子�M程在其生存期�仍试S伺服的最大�求�盗俊5竭_MaxRequestsPerChild的限制後,子�M程����Y束。如果MaxRequestsPerChild��"0",子�M程�⒂肋h不���Y束。��MaxRequestsPerChild�O置成非零值有���好�:
1.可以防止(偶然的)�却��漏�o限�M行,�亩�耗�M�却妗�
2.�o�M程一��有限�勖�,�亩�有助於��服�掌髫��d�p�p的�r候�p少活�舆M程的�盗俊�
注意��於KeepAlive�接,只有第一���求��被��怠J��上,它改�了每��子�M程限制最大�接�盗康男�椤�