<-
Apache > HTTP 服务器 > 文档 > 版本 2.4

多进程模块 (MPM)

可用语言:  de  |  en  |  es  |  fr  |  ja  |  ko  |  tr  |  zh-cn 

本文档描述了什么是多进程模块以及它们如何在 Apache HTTP 服务器中使用。

Support Apache!

另请参阅

top

简介

Apache HTTP 服务器旨在成为一个功能强大且灵活的 Web 服务器,可以在各种平台上以各种不同的环境运行。不同的平台和不同的环境通常需要不同的功能,或者可能以不同的方式最有效地实现相同的功能。Apache httpd 一直通过其模块化设计来适应各种环境。这种设计允许网站管理员通过选择在编译时或运行时加载哪些模块来选择哪些功能将包含在服务器中。

Apache HTTP 服务器 2.0 将这种模块化设计扩展到 Web 服务器的最基本功能。服务器附带了一系列多进程模块 (MPM),这些模块负责绑定到机器上的网络端口、接受请求以及调度子进程来处理请求。

将模块化设计扩展到服务器的这一级别带来了两个重要的好处

在用户级别,MPM 看起来很像其他 Apache httpd 模块。主要区别在于,一次只能将一个且仅一个 MPM 加载到服务器中。可用 MPM 的列表显示在 模块索引页面 上。

top

MPM 默认值

下表列出了各种操作系统的默认 MPM。如果您在编译时没有做出其他选择,这将是选择的 MPM。

Netwarempm_netware
OS/2mpmt_os2
Unixpreforkworkerevent,具体取决于平台功能
Windowsmpm_winnt

这里,“Unix”用于表示类 Unix 操作系统,例如 Linux、BSD、Solaris、Mac OS X 等。

在 Unix 的情况下,安装哪个 MPM 的决定基于两个问题

1. 系统是否支持线程?

2. 系统是否支持线程安全的轮询(具体来说是 kqueue 和 epoll 函数)?

如果这两个问题的答案都是“是”,则默认 MPM 为 event

如果问题 #1 的答案是“是”,但问题 #2 的答案是“否”,则默认值为 worker

如果这两个问题的答案都是“否”,则默认 MPM 将为 prefork

实际上,这意味着默认值几乎总是 event,因为所有现代操作系统都支持这两个功能。

top

将 MPM 构建为静态模块

MPM 可以作为所有平台上的静态模块构建。在构建时选择一个 MPM 并将其链接到服务器。必须重新构建服务器才能更改 MPM。

要覆盖默认 MPM 选择,请使用 configure 脚本的 --with-mpm=NAME 选项。NAME 是所需 MPM 的名称。

服务器编译完成后,可以使用 ./httpd -l 确定选择了哪个 MPM。此命令将列出编译到服务器中的每个模块,包括 MPM。

top

将 MPM 构建为 DSO 模块

在 Unix 和类似平台上,MPM 可以作为 DSO 模块构建,并以与其他 DSO 模块相同的方式动态加载到服务器中。将 MPM 构建为 DSO 模块允许通过更新 MPM 的 LoadModule 指令来更改 MPM,而不是通过重新构建服务器来更改 MPM。

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

尝试 LoadModule 多个 MPM 将导致启动失败,并出现以下错误。

AH00534: httpd: Configuration error: More than one MPM loaded.

此功能使用 configure 脚本的 --enable-mpms-shared 选项启用。使用参数 all,将安装平台上所有可能的 MPM。或者,可以指定 MPM 列表作为参数。

默认 MPM(无论是自动选择还是使用 configure 脚本的 --with-mpm 选项指定)将在生成的服务器配置文件中加载。编辑 LoadModule 指令以选择不同的 MPM。

可用语言:  de  |  en  |  es  |  fr  |  ja  |  ko  |  tr  |  zh-cn 

top

评论

注意
这不是问答部分。此处放置的评论应指向有关改进文档或服务器的建议,如果这些评论已实施或被认为无效/与主题无关,则可能会被我们的版主删除。有关如何管理 Apache HTTP 服务器的问题应发送到我们的 IRC 频道 #httpd(在 Libera.chat 上)或发送到我们的 邮件列表