查看Apache配置文件,我看到了Prefork和Worker MPM的定义.有什么区别,Apache使用哪一个?
小智 117
Prefork和worker是两种类型的MPM apache提供的.两者都有其优点和缺点.
默认情况下,mpm是prefork,它是线程安全的.
Prefork MPM使用多个子进程,每个进程一个线程,每个进程一次处理一个连接.
Worker MPM使用多个子进程,每个进程有多个线程.每个线程一次处理一个连接.
有关详细信息,请访问https://httpd.apache.org/docs/2.4/mpm.html和https://httpd.apache.org/docs/2.4/mod/prefork.html
use*_*737 21
Apache的多处理模块(MPM)负责绑定到机器上的网络端口,接受请求,并派遣子级来处理请求(http://httpd.apache.org/docs/2.2/mpm.html).
它们与任何其他Apache模块一样,只是必须在任何时候只将一个且只有一个MPM加载到服务器中.在配置期间选择MPM并通过使用带有configure脚本的参数将其编译到服务器中,--with-mpm=NAME
其中NAME
是所需MPM的名称.
Apache将为每个操作系统使用默认MPM,除非在编译时选择不同的MPM(例如mpm_winnt
,默认情况下在Windows 上使用).这是操作系统列表及其默认MPM:
beos
mpm_netware
mpmt_os2
prefork
(更新为Apache的版本≥2.4:prefork
,worker
或event
,取决于平台功能)mpm_winnt
要检查编译到服务器中的模块,请使用命令行选项-l
(此处为文档).例如,在Windows安装上,您可能会得到类似的内容:
> httpd -l
Compiled in modules:
core.c
mod_win32.c
mpm_winnt.c
http_core.c
mod_so.c
Run Code Online (Sandbox Code Playgroud)
从版本2.2开始,这是可用核心功能和MPM模块的列表:
core
- 始终可用的核心Apache HTTP Server功能mpm_common
- 由多个多处理模块(MPM)实现的指令集合beos
- 此多处理模块针对BeOS进行了优化.event
- 标准工人MPM的实验变体mpm_netware
多处理模块,实现针对Novell NetWare优化的专用线程Web服务器mpmt_os2
用于OS/2的混合多进程,多线程MPMprefork
实现非线程,预分叉Web服务器mpm_winnt
- 此多处理模块针对Windows NT进行了优化.worker
- 实现混合多线程多进程Web服务器的多处理模块现在,之间的差异prefork
和worker
.
实现一个非线程的预分叉Web服务器,以类似于Apache 1.3的方式处理请求.它适用于需要避免线程与非线程安全库兼容的站点.它也是隔离每个请求的最佳MPM,因此单个请求的问题不会影响任何其他请求.
所述worker
MPM实现混合多进程多线程服务器和提供更好的性能,因此它应该除非人在使用含有非线程安全库(也见其他模块是优选的这一讨论或此上Serverfault).
对于CentOS 6.x和7.x(包括Amazon Linux),请使用:
sudo httpd -V
Run Code Online (Sandbox Code Playgroud)
这将显示哪些MPM已配置.无论是prefork,工作者还是事件.Prefork是早期的线程安全模型.Worker是多线程的,事件支持php-mpm,它应该是一个更好的系统来处理线程和请求.
但是,根据配置,您的结果可能会有所不同.我在php-mpm中看到了很多不稳定因素而且没有任何速度提升.攻击性蜘蛛可以很容易地耗尽php-mpm中的最大子进程.
prefork,worker或event的设置在sudo nano /etc/httpd/conf.modules.d/00-mpm.conf中设置(对于CentOS 6.x/7.x/Apache 2.4).
# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines:
# 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
188804 次 |
最近记录: |