# 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
/etc/httpd/conf.modules.d/00-mpm.conf
# 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
8条答案
按热度按时间erhoui1w1#
Prefork和worker是Apache提供的两种MPM。两者各有利弊。
默认情况下,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
9gm1akwq2#
Apache的多处理模块(Multi-Processing Modules,MPM)负责绑定到机器上的网络端口,接受请求,并分派子节点来处理请求(http://httpd.apache.org/docs/2.2/mpm.html)。
它们就像任何其他Apache模块一样,只是 * 在任何时候都必须向服务器加载一个且只有一个MPM 。MPM是在配置过程中选择的,并通过使用参数
--with-mpm=NAME
和configure脚本编译到服务器*中,其中NAME
是所需MPM的名称。Apache将为每个操作系统使用默认的MPM,除非在编译时选择不同的MPM(例如在Windows上默认使用
mpm_winnt
)。以下是操作系统及其默认MPM的列表:beos
mpm_netware
mpmt_os2
prefork
(***更新***适用于Apache版本≥ 2.4:prefork
、worker
或event
,具体取决于平台功能)mpm_winnt
使用命令行选项
-l
(here是文档)检查哪些模块被编译到服务器中。例如,在Windows安装中,您可能会得到如下内容:从版本2.2开始,这是list of available core features and MPM modules:
core
-始终可用的核心Apache HTTP服务器功能mpm_common
-由多个多处理模块(MPM)实现的指令集合beos
-此多处理模块针对BeOS进行了优化。event
-标准worker MPM的实验性变体mpm_netware
多处理模块,实现专为Novell NetWare优化的线程Web服务器mpmt_os2
用于OS/2的混合多进程、多线程MPMprefork
实现非线程、预分叉的Web服务器mpm_winnt
-此多处理模块针对Windows NT进行了优化。worker
-实现混合多线程多进程Web服务器的多处理模块prefork
和worker
的区别。prefork
MPM实现了一个非线程的、预分叉的Web服务器,以类似于Apache 1.3的方式处理请求。它适用于需要避免线程以兼容非线程安全库的站点。它也是隔离每个请求的最佳MPM,因此单个请求的问题不会影响任何其他请求。
worker
MPM实现了一个混合的多进程多线程服务器,并提供了更好的性能,因此它应该是首选,除非使用包含非线程安全库的其他模块(参见Serverfault上的this discussion或this)。lzfw57am3#
查看this以了解更多详细信息。它指的是Apache如何处理多个请求。Preforking是默认的,它会启动多个Apache进程(这里默认为2个,不过我相信可以通过httpd.conf进行配置)。Worker MPM将为每个请求启动一个新线程,我猜这会更有效地利用内存。从历史上看,Apache一直使用prefork,所以它是一个经过更好测试的模型。线程是在2.0中才添加的。
mdfafbf14#
对于CentOS 6.x和7.x(包括Amazon Linux),请用途:
这将显示配置了哪些MPM。prefork、worker或event。Prefork是早期的线程安全模型。Worker是多线程的,event支持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)中设置。
2w2cym1i5#
您可以通过发出以下命令来判断Apache使用的是preform还是worker
在结果输出中,查找是否提到了prefork. c或worker. c
jdg4fx2g6#
在RHEL7上的Apache 2.4中很容易在prefork或worker mpm之间切换
通过执行以下命令检查MPM类型
现在要更改MPM,请编辑以下文件并取消注解所需的MPM
ne5o7dgx7#
Apache定义了两种类型的MPM(多处理模块):
1:Prefork 2:工人
默认情况下,Apacke配置为预分叉模式,即非线程预分叉Web服务器。这意味着每个Apache子进程都包含一个线程,一次处理一个请求。正因为如此,它消耗了更多的资源。
Apache还有一个worker MPM,它可以将Apache变成一个多进程、多线程的Web服务器。Worker MPM使用多个子进程,每个子进程有许多线程。
yr9zkbsy8#
首先检查哪个模块正在运行:-
如果你是在ubuntu/debian上配置:-
sudo apachectl -M| grep 'mpm'
vi /etc/apache2/mods-available/mpm_prefork.conf
..
.. StartServers 8
.. MinSpareServers 20
.. MaxSpareServers 40
.. MaxRequestWorkers 200
.. MaxConnectionsPerChild 4500
..
apachectl -t用于语法检查或apachectl configtest
如果你想在worker或event中更改,则:
/etc/apache2/mods-available/mpm_event.conf
在不同的模块中更改后,您需要切换模块如果您正在使用事件模块并希望更改为Prefork模块:-
禁用事件模块:-
a2dismod mpm_event
启用Prefork模块:-
a2enmod mpm_event
重启Apache:
服务apache 2重启
如果httpd(configure on redhat,centos,..)
首先检查哪个模块正在运行:-
httpd -V| grep -i 'mpm'
vi /etc/httpd/conf.modules.d/00-mpm.conf
uncomment prefork Module line(LoadModule mpm_prefork_module modules/mod_mpm_prefork.so):-
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
如果您想更改其他模块,然后取消注解该模块行(事件或工作者)和其他注解,也是一样的
httpd -t用于语法检查
现在启动Apache服务:- systemctl restart httpd
但有时它给你错误的php模块之前改变mpm模块然后所有完整的教程和计算:-
https://www.youtube.com/watch?v=8V4TFgFvurU&list=PL5gKsZrSyQQIBNOTLGedvzlKLD9hKoTmS&index=10