MPM 有多个,常用的有:prefork、worker、event、winnt,其中前3个用于类unix系统,后者为Windows系统设计使用,其他如:netware、mpmt_os2 等暂时笔者还没用过。
查看当前使用的MPM模块:apachectl –l
比较: prefork MPM 使用多个子进程,但每个子进程只有一个线程,每个进程也就只能保持一个正常连接,prefork 只需要很小的配置指令,效益很高,适用与没有线程安全库的系统。 worker MPM 也使用多个子进程,但每个子进程可以有多个线程,可以维持多个请求连接,很节省内存容量,但线程共享内存空间,容易一起崩溃。
所以,Prefork 速度领先 worker 是以CPU资源和内存容量为代价的,鉴于worker 的稳定性和兼容性不及prefork ,现在主流默认是 prefork ,而 event 是一个标准workerMPM的实验性变种,被设计成面向需要处理大量并发连接的场合,目前主要是实验阶段。
vim /etc/httpd/extra/httpd-mpm.conf
prefork:
<IfModule mpm_prefork_module>
StartServers 6
MinSpareServers 6
MaxSpareServers 10
MaxRequestWorkers 500
MaxConnectionsPerChild 400
</IfModule>
MaxRequestWorkers
最大进程数量 500
其他同下:
event:
<IfModule mpm_event_module>
StartServers 5
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 4000
MaxConnectionsPerChild 2000
</IfModule>
StartServers
指定服务器启动时建立的子进程数量,默认一般都为:5
MinSpareThreads
最小空闲线程数,默认值是"75"。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太少,子进程将产生新的空闲线程。
MaxSpareThreads
设置最大空闲线程数。默认值是"250"。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太多,子进程将杀死多余的空闲线程。MaxSpareThreads的取值范围是有限制的。Apache将按照如下限制自动修正你设置的值:worker要求其大于等于MinSpareThreads加上ThreadsPerChild的和。
ThreadsPerChild
每个子进程建立的常驻的执行线程数。默认值是25。子进程在启动时建立这些线程后就不再建立新的线程了
MaxRequestWorkers
最大线程数量
MaxRequestsPerChild
每个子进程在其生存期内允许伺服的最大请求数量, 如果设置为0,子进程将永远不会结束,这里不设置为0 主要为了防止内存泄漏。