multiprocessing 模块(MPM)

本文档描述了什么是 multiprocessing 模块以及 Apache HTTP Server 如何使用它们。

Introduction

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

Apache HTTP Server 2.0 将此模块化设计扩展到 Web 服务器的最基本功能。该服务器附带了多种选择的 multiprocessing 模块(MPM),这些模块负责绑定到计算机上的网络端口,接受请求并分派子代来处理请求。

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

在用户级别,MPM 的外观与其他 Apache httpd 模块非常相似。主要区别在于,必须随时将一个 MPM 加载到服务器中。可用的 MPM 列表显示在模块索引页上。

MPM Defaults

下表列出了各种 os 的默认 MPM。如果您在编译时没有其他选择,则将选择该 MPM。

Netware mpm_netware
OS/2 mpmt_os2
Unix preforkworkerevent,具体取决于平台功能
Windows mpm_winnt

Note

在这里,“ Unix”用于表示类似 Unix 的 os,例如 Linux,BSD,Solaris,Mac OS X 等。

对于 Unix,安装哪个 MPM 的决定基于两个问题:

1.系统是否支持线程?

2.系统是否支持线程安全轮询(特别是 kqueue 和 epoll 函数)?

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

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

如果两个问题的答案均为“否”,则默认 MPM 为prefork

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

将 MPM 构建为静态模块

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

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

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

将 MPM 构建为 DSO 模块

在 Unix 和类似平台上,MPM 可以作为 DSO 模块构建并以与其他 DSO 模块相同的方式动态加载到服务器中。通过将 MPM 构建为 DSO 模块,可以通过更新 MPM 的LoadModule指令而不是通过重建服务器来更改 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选项指定的默认 MPM 将加载到生成的服务器配置文件中。编辑LoadModule指令以选择其他 MPM。

首页