apache不同操作系统下的不同MPM模块详细解说

[apache] 2024-03-28 圈点300

摘要:详细的介绍一下关于mpm_winnt和mpm_prefork 及mpm_worker。以及它们详细的配置方法和参数。还有工作流程。

在不同的操作系统下,Apache有不同的MPM模块。


具体如下:mpm_beos、mpm_event、mpm_netware、mpmt_os2、mpm_prefork、mpm_winnt、mpm_worker。


实际上我们可以将MPM模块编译进我们自己的Apache中。不过,难度较大。默认情况下,在不同的操作系统环境下,Apache将按照如下说明选择默认的MPM模块,这也是Apache针对不同平台推荐使用的MPM模块。


Windows >mpm_winnt
Unix/Linux > mpm_prefork   mpm_worker

BeOS  >  mpm_beos  
Netware  >  mpm_netware  
OS/2  >  mpmt_os2   


前面两种是我们最常遇到的MPM模块。下面详细的介绍一下关于mpm_winnt和mpm_prefork 及mpm_worker


首先,如何查看apache使用的MPM模块;

在Apache的安装目录\bin中,然后键入命令httpd -l,可以查阅到当前apache使用的何种MPM模块。


mpm_winnt模块说明:

mpm_winnt模块一般仅在Windows操作系统中出现的MPM模块。它只创建一个单独的子进程,并在这个子进程中轮流产生多个线程来处理请求。


详细的配置方法见:apache之mpm_winnt模块详细解说



mpm_prefork模块说明:

在mpm_prefork模块中,每个请求对应一个子进程,因此其占用的系统资源相对其他两种模块而言较多。不过mpm_prefork模块的优点在于它的每个子进程都会独立处理对应的单个请求,这样,如果其中一个请求出现问题就不会影响到其他请求。同时,mpm_prefork模块可以应用于不具备线程安全的第三方模块(比如PHP的非线程安全版本),且在不支持线程调试的平台上易于调试。此外,mpm_prefork模块还具有比mpm_worker模块更高的稳定性。


详细的配置方法见:apache之mpm_prefork模块详细解说



mpm_worker模块说明:

mpm_worker模块可以看作是mpm_prefork模块的改进版。mpm_worker模块的工作方式与mpm_prefork模块类似。不过,由于处理相同请求的情况下,基于进程(例如mpm_prefork)比基于线程的处理方式占用的系统资源要多。因此,与mpm_prefork模块不同的是,mpm_worker模块会让每个子进程创建固定数量的服务线程和一个监听线程,并让每个服务线程来处理客户端的请求,监听线程用于监听接入请求并将其传递给服务线程处理和应答。Apache总是试图维持一个备用或是空闲的服务线程池。这样,客户端无须等待新线程或新进程的建立即可得到处理。

与mpm_prefork模块相比,mpm_worker模块可以进一步减少系统资源的开销。再加上它也使用了多进程,每个进程又有多个线程,因此它与完全基于线程的处理方式相比,又增加了一定的稳定性。


详细的配置方法见:apache之mpm_worker模块详细解说







mpm  apache  

感谢反馈,已提交成功,审核后即会显示