Apache MPM 预叉

Description:实现非线程的预分支 Web 服务器
Status:MPM
Module Identifier:mpm_prefork_module
Source File:prefork.c

Summary

该 multiprocessing 模块(MPM)实现了非线程的,预分支的 Web 服务器。每个服务器进程都可以回答传入的请求,并且父进程 Management 服务器池的大小。它适用于需要避免使用线程以与非线程安全库兼容的站点。这也是隔离每个请求的最佳 MPM,因此单个请求的问题不会影响其他任何请求。

该 MPM 非常自我调节,因此几乎不需要调整其配置指令。最重要的是MaxRequestWorkers足够大,可以处理您希望接收的并发请求,但又足够小以确保所有进程都有足够的物理 RAM。

工作原理

单个控制进程负责启动子进程,以监听连接并在连接到达时为其提供服务。 Apache httpd 总是尝试维护几个备用或空闲的服务器进程,这些进程随时可以处理传入的请求。这样,Client 端无需 await 新的子进程被派生就可以满足他们的请求。

StartServersMinSpareServersMaxSpareServersMaxRequestWorkers调节父进程如何创建子进程来服务请求。通常,Apache httpd 非常自我调节,因此大多数站点无需根据其默认值调整这些指令。需要同时处理 256 个以上请求的站点可能需要增加MaxRequestWorkers,而内存有限的站点可能需要减少MaxRequestWorkers,以防止服务器崩溃(将内存交换到磁盘,再交换回去)。 performance hints文档中提供了有关调优过程创建的更多信息。

为了绑定到端口 80,父进程通常在 Unix 下以root开头,而子进程由 Apache httpd 作为特权较低的用户启动。 UserGroup伪指令用于设置 Apache httpd 子进程的特权。子进程必须能够读取将要提供的所有内容,但应具有尽可能少的特权。

MaxConnectionsPerChild通过杀死旧进程并启动新进程来控制服务器回收进程的频率。

当遇到雷电群问题时(通常,当有多个侦听套接字时),此 MPM 使用mpm-accept互斥锁来序列化对传入连接的访问。可以使用Mutex指令配置此互斥锁的实现方面。 performance hints文档包含有关此互斥锁的其他信息。

MaxSpareServers Directive

Description:空闲子服务器进程的最大数量
Syntax:MaxSpareServers number
Default:MaxSpareServers 10
Context:server config
Status:MPM
Module:prefork

MaxSpareServers伪指令设置* idle *子服务器进程的所需最大数目。空闲进程是不处理请求的进程。如果有超过MaxSpareServers个空闲,则父进程将杀死多余的进程。

仅在非常繁忙的站点上才需要调整此参数。将此参数设置为大量几乎总是一个坏主意。如果您尝试将值设置为等于或小于MinSpareServers,则 Apache HTTP Server 将自动将其调整为MinSpareServers + 1

See also

MinSpareServers Directive

Description:最小空闲子服务器进程数
Syntax:MinSpareServers number
Default:MinSpareServers 5
Context:server config
Status:MPM
Module:prefork

MinSpareServers伪指令设置* idle *子服务器进程的所需最小数目。空闲进程是不处理请求的进程。如果空闲状态少于MinSpareServers,则父进程将创建新的子进程:它将先生成一个,再 await 一秒钟,然后生成两个,再 await 一秒钟,再生成四个,然后将以指数方式 continue 运行,直到每秒生成 32 个孩子。只要满足MinSpareServers设置,它将停止。

仅在非常繁忙的站点上才需要调整此参数。将此参数设置为大量几乎总是一个坏主意。

See also