MPM是apache的多道处理模块,用于定义apache对客户端请求的处理方式.在linux中apache经常使用的三种MPM模型分别是prefork、worker和event.html
预先生成进程,一个请求用一个进程响应.Apache2.2版本默认使用prefork模型.优势:稳定可靠、执行效率高,任何一个进程的崩溃不会影响其它请求.缺点:在大并发的时候对服务器资源消耗严重.linux
基于线程的处理方式,一个进程生成多个线程,一个请求用一个线程响应.因为使用线程访问,多个线程共享同一个进程的资源,若是一个进程访问过某一个文件而且打开了,另外一个线程访问就不用再次打开.优势:在高并发的状况下,对服务器的资源消耗相对prefork模型要小不少.缺点:执行效率、稳定性都不如prefork模型.linux不是个原生支持线程的操做系统,经测试发现worker模型在linux上面的综合表现不如prefork模型.web
基于事件驱动的处理模型,一个进程处理多个请求.前面两种模型在开启长链接的状况下都是保持一个整的进程或线程来等待客户端的请求,在高并发的状况下这种机制很快会耗光服务器的可用进程.event模型简单的来讲就是把线程进行分工,采用专用的进程来监听套接字保持链接,由于监听套接字和保持TCP链接所须要的资源极小一个进程就能够处理大量的这种请求.event模型在apache2.2上面只是个测试模型,在2.4上面已经默认使用event模型了.须要注意的event模型是不能再https的访问下工做的.shell
在2.4版本中关于MPM的配置文件保存在/etc/httpd/conf.modules.d目录下一个叫00-mpm.conf的配置文件apache
# pwd /etc/httpd/conf.modules.d # ls 00-base.conf 00-lua.conf 00-proxy.conf 01-cgi.conf 00-dav.conf 00-mpm.conf 00-systemd.conf
查看这个配置文件,能够看出当前的工做模型是prefork,若是要更改的话直接去掉LoadModule前的#,但只能启用三种工做模型中的一种。服务器
# cat 00-mpm.conf # Select the MPM module which should be used by uncommenting exactly # one of the following LoadModule lines: #能够看出当前的工做模型是prefork # prefork MPM: Implements a non-threaded, pre-forking web server # See: http://httpd.apache.org/docs/2.4/mod/prefork.html LoadModule mpm_prefork_module modules/mod_mpm_prefork.so # worker MPM: Multi-Processing Module implementing a hybrid # multi-threaded multi-process web server # See: http://httpd.apache.org/docs/2.4/mod/worker.html # #LoadModule mpm_worker_module modules/mod_mpm_worker.so # event MPM: A variant of the worker MPM with the goal of consuming # threads only for connections with active processing # See: http://httpd.apache.org/docs/2.4/mod/event.html # #LoadModule mpm_event_module modules/mod_mpm_event.so