prefork模式
q个多\处理模块(MPM)实现了一个非U程型的、预z的web服务器,它的工作方式cM于Apache 1.3。它适合于没有线E安全库Q需要避免线E兼Ҏ问题的pȝ。它是要求将每个h怺独立的情况下最好的MPMQ这栯一个请求出现问题就不会影响到其他请求?/p>
q个MPMh很强的自我调节能力,只需要很的配置指o调整。最重要的是MaxClients讄Z个够大的数g处理潜在的请求高峎ͼ同时又不能太大,以致需要用的内存出物理内存的大?/p>
worker模式
此多路处理模?MPM)使网l服务器支持混合的多U程多进E。由于用线E来处理hQ所以可以处理v量请求,而系l资源的开销于Zq程的MPM。但是,它也使用了多q程Q每个进E又有多个线E,以获得基于进E的MPM的稳定性?/p>
控制q个MPM的最重要的指令是Q控制每个子q程允许建立的线E数的ThreadsPerChild指oQ和控制允许建立的ȝE数的MaxClients指o?/p>
prefork和worker模式的切?/strong>
1.当前的prefork模式启动文g改名
mv httpd httpd.prefork
2.worker模式的启动文件改?br>mv httpd.worker httpd
3.修改Apache配置文g
vi /usr/local/apache2/conf/extra/httpd-mpm.conf
扑ֈ里边的如下一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
卛_换成worker方式启动apache2
处于E_性和安全性考虑Q不更换apache2的运行方式,使用pȝ默认prefork卛_。另外很多php模块不能工作在worker模式下,例如redhat linux自带的php也不能支持线E安全。所以最好不要切换工作模式?/p>
prefork和worker模式的比?/strong> worker模式使用多个子进E,每个子进E有多个U程。每个线E在某个定的时间只能维持一个连接。通常来说Q在一个高量的HTTP服务器上QWorker MPM是个比较好的选择Q因为Worker MPM的内存用比Prefork MPM要低得多。但worker MPM也由不完善的地方Q如果一个线E崩溃,整个q程׃q同其所有线E一?#8221;L”.׃U程׃n内存I间Q所以一个程序在q行时必被pȝ识别?#8221;每个U程都是安全?#8221;?/p>
ȝ来说Qprefork方式速度要稍高于workerQ然而它需要的cpu和memory资源也稍多于woker?/p>
prefork模式配置详解 StartServers MinSpareServers MaxSpareServers MaxClients MaxRequestsPerChild worker模式配置详解 StartServers MaxClients MinSpareThreads MaxSpareThreads ThreadsPerChild MaxRequestsPerChild
prefork模式使用多个子进E,每个子进E只有一个线E。每个进E在某个定的时间只能维持一个连接。在大多数^CQPrefork MPM在效率上要比Worker MPM要高Q但是内存用大得多。prefork的无U程设计在某些情况下比worker更有优势Q它可以使用那些没有处理好线E安全的W三Ҏ块,q且对于那些U程调试困难的^台而言Q它也更Ҏ调试一些?/p>
<IfModule mpm_prefork_module>
ServerLimit 256
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 256
MaxRequestsPerChild 0
</IfModule>
ServerLimit
默认的MaxClient最大是256个线E?如果惌|更大的|q加上ServerLimitq个参数?0000是ServerLimitq个参数的最大倹{如果需要更大,则必ȝ译apache,此前都是不需要重新编译Apache?br>生效前提Q必L在其他指令的前面
指定服务器启动时建立的子q程数量Qprefork默认??/p>
指定I闲子进E的最数量,默认?。如果当前空闲子q程数少于MinSpareServers Q那么Apache以最大每U一个的速度产生新的子进E。此参数不要讄太大?/p>
讄I闲子进E的最大数量,默认?0。如果当前有过MaxSpareServers数量的空闲子q程Q那么父q程杀d余的子进E。此参数不要讄太大。如果你该指o的D|ؓ比MinSpareServers,Apache会自动其修改?#8221;MinSpareServers+1″?/p>
限定同一旉客户端最大接入请求的数量(单个q程q发U程?Q默认ؓ256。Q何超qMaxClients限制的请求都进入等候队?一旦一个链接被释放Q队列中的请求将得到服务。要增大q个|你必d时增大ServerLimit?/p>
每个子进E在其生存期内允怼服的最大请求数量,默认?0000.到达MaxRequestsPerChild的限制后Q子q程会l束。如果MaxRequestsPerChild?#8221;0″Q子q程永q不会结束。将MaxRequestsPerChild讄成非零值有两个好处Q?br>1.可以防止(偶然?内存泄漏无限q行Q从而耗尽内存?br>2.l进E一个有限寿命,从而有助于当服务器负蝲减轻的时候减活动进E的数量?/p>
<IfModule mpm_worker_module>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
服务器启动时建立的子q程敎ͼ默认值是”3″?/p>
允许同时伺服的最大接入请求数?最大线E数?。Q何超qMaxClients限制的请求都进入等候队列。默认值是”400″,16(ServerLimit)乘以25(ThreadsPerChild)的结果。因此要增加MaxClients的时候,你必d时增加ServerLimit的倹{?/p>
最空闲线E数,默认值是”75″。这个MPM基于整个服务器监视I闲U程数。如果服务器中ȝI闲U程数太,子进E将产生新的I闲U程?/p>
讄最大空闲线E数。默认值是”250″。这个MPM基于整个服务器监视I闲U程数。如果服务器中ȝI闲U程数太多,子进E将杀d余的I闲U程。MaxSpareThreads的取D围是有限制的。Apache按照如下限制自动修正你讄的|worker要求其大于等于MinSpareThreads加上ThreadsPerChild的和?/p>
每个子进E徏立的帔R的执行线E数。默认值是25。子q程在启动时建立q些U程后就不再建立新的U程了?/p>
讄每个子进E在其生存期内允怼服的最大请求数量。到达MaxRequestsPerChild的限制后Q子q程会l束。如果MaxRequestsPerChild?#8221;0″Q子q程永q不会结束。将MaxRequestsPerChild讄成非零值有两个好处Q?br>1.可以防止(偶然?内存泄漏无限q行Q从而耗尽内存?br>2.l进E一个有限寿命,从而有助于当服务器负蝲减轻的时候减活动进E的数量?br>注意对于KeepAlive链接Q只有第一个请求会被计数。事实上Q它改变了每个子q程限制最大链接数量的行ؓ?/p>