Apache HTTP 服务器版本 2.4
描述 | 实现一个非线程化的预派生 Web 服务器 |
---|---|
状态 | MPM |
模块标识符 | mpm_prefork_module |
源文件 | prefork.c |
此多处理模块 (MPM) 实现一个非线程化的预派生 Web 服务器。每个服务器进程都可以响应传入请求,而父进程管理服务器池的大小。它适用于需要避免线程以确保与非线程安全库兼容的站点。它也是隔离每个请求的最佳 MPM,因此单个请求的问题不会影响其他请求。
此 MPM 非常自调节,因此很少需要调整其配置指令。最重要的是,MaxRequestWorkers
要足够大,以处理您预计接收到的同时请求数量,但要足够小,以确保所有进程都有足够的物理 RAM。
单个控制进程负责启动子进程,这些子进程监听连接并在连接到达时提供服务。Apache httpd 始终尝试维护多个 备用 或空闲服务器进程,这些进程随时准备为传入请求提供服务。这样,客户端就不需要等待创建新的子进程才能为其请求提供服务。
StartServers
、MinSpareServers
、MaxSpareServers
和 MaxRequestWorkers
规范了父进程如何创建子进程来为请求提供服务。通常,Apache httpd 非常自调节,因此大多数站点不需要调整这些指令的默认值。需要为超过 256 个同时请求提供服务的站点可能需要增加 MaxRequestWorkers
,而内存有限的站点可能需要减少 MaxRequestWorkers
,以防止服务器出现抖动(将内存交换到磁盘并返回)。有关调整进程创建的更多信息,请参阅 性能提示 文档。
虽然父进程通常在 Unix 下以 root
身份启动以绑定到端口 80,但子进程由 Apache httpd 以特权较低的用户的身份启动。User
和 Group
指令用于设置 Apache httpd 子进程的特权。子进程必须能够读取将要提供的所有内容,但应尽可能少地拥有超出此范围的特权。
MaxConnectionsPerChild
控制服务器通过杀死旧进程并启动新进程来回收进程的频率。
此 MPM 使用 mpm-accept
互斥锁来序列化对传入连接的访问,当受到雷鸣般的羊群问题的影响时(通常,当有多个监听套接字时)。此互斥锁的实现方面可以使用 Mutex
指令进行配置。有关此互斥锁的更多信息,请参阅 性能提示 文档。
描述 | 空闲子服务器进程的最大数量 |
---|---|
语法 | MaxSpareServers number |
默认值 | MaxSpareServers 10 |
上下文 | 服务器配置 |
状态 | MPM |
模块 | 预派生 |
MaxSpareServers
指令设置所需的空闲子服务器进程的最大数量。空闲进程是指未处理请求的进程。如果空闲进程多于 MaxSpareServers
,则父进程将杀死多余的进程。
仅在非常繁忙的站点上才需要调整此参数。将此参数设置为较大的数字几乎总是错误的做法。如果您尝试将值设置为等于或低于 MinSpareServers
,Apache HTTP 服务器将自动将其调整为 MinSpareServers
+ 1
。
描述 | 空闲子服务器进程的最小数量 |
---|---|
语法 | MinSpareServers number |
默认值 | MinSpareServers 5 |
上下文 | 服务器配置 |
状态 | MPM |
模块 | 预派生 |
MinSpareServers
指令设置所需的空闲子服务器进程的最小数量。空闲进程是指未处理请求的进程。如果空闲进程少于 MinSpareServers
,则父进程会创建新的子进程:它会生成一个子进程,等待一秒钟,然后生成两个子进程,等待一秒钟,然后生成四个子进程,它会以指数方式继续,直到每秒生成 32 个子进程。只要满足 MinSpareServers
设置,它就会停止。
仅在非常繁忙的站点上才需要调整此参数。将此参数设置为较大的数字几乎总是错误的做法。