关于Apache的MPM选项

环境

Apache2.4.41是Ubuntu20.4操作系统的一个版本。

首先

MPM是Multi Processing Module的缩写,指的是实现多进程的机制。当连接到Web服务器的数量增加时,如果使用单进程处理,效率将变得低下,导致响应速度下降。为了提高响应速度,需要进行调优以使其能够在多进程中进行处理。在Apache2.2系列之前,只支持单进程,但自Apache2.4系列之后,可以支持多进程。

MPM在进程管理方面提供了三种主要规范。

    • prefork

 

    • event

 

    worker

prefork的工作模式是单进程,而event和worker是多进程。在Apache2.2版本之前,默认运行在prefork模式下,但在Apache2.4版本之后,event模式成为默认选项。

确认

这是一个用于检查在我的环境中 MPM 配置的命令。我的环境是 Apache2.4.41,所以默认情况下是配置为 event。

$ apachectl -V | grep MPM
Server MPM:     event

通常情况下,采用MPM的事件(event)是没有问题的。但是根据情况,可以更改为其他MPM。MPM是以模块的形式提供的,安装Apache2时,会同时安装这三个MPM。它们被保存在mods-available目录中。

$ls -l /etc/apache2/mods-available | grep mpm_
mpm_event.conf
mpm_event.load
mpm_prefork.conf
mpm_prefork.load
mpm_worker.conf
mpm_worker.load

查看”mods_enabled”目录,只有”event”被启用。

$ls -l /etc/apache2/mods-enabled | grep mpm_
mpm_event.conf
mpm_event.load

在查看mpm_prefork.conf配置文件时,可以设置等待进程的最小值和最大值的指令存在。

MinSpareServers           5
MaxSpareServers          10

当查看 mpm_event.conf 配置文件时,可以看到它是设置等待线程的最小和最大值的指令,而不是等待进程。

MinSpareThreads          25
MaxSpareThreads          75  

如果是单进程,将为每个连接启动一个进程,但在多进程情况下,多个线程将在一个进程中运行,并为一个连接启动一个线程。

当连接数增加时,会启动新的线程,导致响应变慢。而当连接数减少时,由于启动了太多无用的线程,会占用大量内存。线程数和连接数之间存在着一种权衡关系。

免费赠送

在PHP的环境下进行MPM配置时,会使用到PHP提供的模块,如mod_php。这个模块在内部使用prefork。要支持event,需要改用php-fpm。