prefork是Unix平台上默认的MPM,编译时可使用参数./configure –with-mpm=worker自定义。
查看当前MPM:
#https://www.haiyun.me
httpd -V|grep mpm
-D APACHE_MPM_DIR="server/mpm/prefork"
prefork采用预派生子进程方式,用单独的子进程来处理不同的请求,每个进程时间内只能维持一个连接,进程之间彼此独立。
prefork配置:
<IfModule prefork.c>
ServerLimit 256 #服务器端连接数限制,最大2000
StartServers 8 #初始启动8个进程
MinSpareServers 5 #最小空闲进程数
MaxSpareServers 20 #最大空闲进程数,超过限制父进程将杀死多余的子进程。
MaxClients 256 #最大连接、进程数,一般和ServerLimit相同,超过此限制的请求进入等候队列。
MaxRequestsPerChild 4000 #每个进程生存期间可处理请求次数,超过终结此进程。
</IfModule>
worker支持多线程和多进程混合模型的MPM,使用多线程来处理,可以处理相对大量的请求,而系统资源的开销要小于基于prefork的服务器。
worker配置:
<IfModule worker.c>
StartServers 10 #默认启动子进程数
MaxClients 150 #同一时间最大连接数
MinSpareThreads 25 #最小空闲线程数
MaxSpareThreads 75 #最大空闲线程数
ThreadsPerChild 25 #每个进程建立的常驻线程数
MaxRequestsPerChild 40000 #每个进程生存期间可处理请求次数,超过终结此进程。
</IfModule>