On this page
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 新的子进程被派生就可以满足他们的请求。
StartServers,MinSpareServers,MaxSpareServers和MaxRequestWorkers调节父进程如何创建子进程来服务请求。通常,Apache httpd 非常自我调节,因此大多数站点无需根据其默认值调整这些指令。需要同时处理 256 个以上请求的站点可能需要增加MaxRequestWorkers,而内存有限的站点可能需要减少MaxRequestWorkers,以防止服务器崩溃(将内存交换到磁盘,再交换回去)。 performance hints文档中提供了有关调优过程创建的更多信息。
为了绑定到端口 80,父进程通常在 Unix 下以root
开头,而子进程由 Apache httpd 作为特权较低的用户启动。 User和Group伪指令用于设置 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
设置,它将停止。
仅在非常繁忙的站点上才需要调整此参数。将此参数设置为大量几乎总是一个坏主意。