HTTPD三种工作模型

HTTPD三种工作模型

MPM是apache的多道处理模块,用于定义apache对客户端请求的处理方式.在linux中apache常用的三种MPM模型分别是prefork、worker和event.

prefork:

预先生成进程,一个请求用一个进程响应.Apache2.2版本默认使用prefork模型.优点:稳定可靠、执行效率高,任何一个进程的崩溃不会影响其它请求.缺点:在大并发的时候对服务器资源消耗严重.

worker:

基于线程的处理方式,一个进程生成多个线程,一个请求用一个线程响应.由于使用线程访问,多个线程共享同一个进程的资源,如果一个进程访问过某一个文件并且打开了,另一个线程访问就不用再次打开.优点:在高并发的情况下,对服务器的资源消耗相对prefork模型要小很多.缺点:执行效率、稳定性都不如prefork模型.linux不是个原生支持线程的操作系统,经测试发现worker模型在linux上面的综合表现不如prefork模型.

event:

基于事件驱动的处理模型,一个进程处理多个请求.前面两种模型在开启长连接的情况下都是保持一个整的进程或线程来等待客户端的请求,在高并发的情况下这种机制很快会耗光服务器的可用进程.event模型简单的来说就是把线程进行分工,采用专用的进程来监听套接字保持连接,因为监听套接字和保持TCP连接所需要的资源极小一个进程就可以处理大量的这种请求.event模型在apache2.2上面只是个测试模型,在2.4上面已经默认使用event模型了.需要注意的event模型是不能再https的访问下工作的.

查看当前的工作模型:

在2.4版本中关于MPM的配置文件保存在/etc/httpd/conf.modules.d目录下一个叫00-mpm.conf的配置文件

# 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

原文地址:https://www.cnblogs.com/mfyang/p/8475443.html