Prefork MPM启动时创建的子进程数由StartServers参数控制,默认值通常为5;其值需根据内存和并发需求合理设置,并与MinSpareServers、MaxSpareServers、MaxRequestWorkers等参数协同调优。
apache 的 prefork mpm(multi-processing module)是为 unix/linux 系统设计的多进程模型,它不使用线程,每个请求由独立的子进程处理。所谓“启动服务器数”,实际指的是 启动时创建的子进程数量,由 startservers 参数控制——这是 prefork 模块最关键的初始化参数之一。
StartServers:决定初始进程池大小
该参数指定 Apache 启动时 fork 出多少个子进程来响应请求。值过小会导致刚启动时并发能力弱,新请求需等待新进程创建;值过大则浪费内存和系统资源(每个进程独占内存,通常 10–30 MB)。
- 默认值一般为 5(不同发行版或版本可能略有差异,如 httpd-2.4.x 常见为 5)
- 建议根据服务器空闲内存和典型并发请求数估算:例如,若单个 httpd 进程平均占用 15 MB,服务器有 2 GB 可用内存,则理论最大进程数约 130;StartServers 可设为该值的 10%–20%,即 10~25
- 生产环境应结合
MaxRequestWorkers(原MaxClients)协调设置,StartServers 不宜超过后者的 1/3
关联参数:共同影响进程生命周期
StartServers 不是孤立工作的,它与以下参数协同管理进程数量:
- MinSpareServers:空闲子进程最小数量。低于此值时,父进程会 fork 新进程补足
- MaxSpareServers:空闲子进程最大数量。超过时,父进程会 kill 掉多余进程
- MaxRequestWorkers:同一时刻可服务的最大并发请求数(即最大子进程数),是内存限制的硬边界
-
MaxConnectionsPerChild:每个子进程处理多少请求后自动退出(防内存泄漏),设为
0表示永不过期
如何查看与验证当前设置
修改配置后需重启 Apache 生效。确认是否生效可:
- 检查配置文件(通常是
/etc/httpd/conf.modules.d/00-mpm.conf或/etc/apache2/mods-available/mpm_prefork.conf),确认加载的是 prefork 模块并存在类似配置:
StartServers 10
MinSpareServers 10
MaxSpareServers 20
MaxRequestWorkers 150
MaxConnectionsPerChild 10000
</IfModule>
- 运行
httpd -V | grep -i mpm或apache2ctl -V | grep -i mpm确认启用的是 prefork - 通过
ps aux | grep httpd | grep -v grep观察启动后实际进程数,初期应接近 StartServers 值
Java 应用场景下的特别提醒
Apache 本身是 C 写的 Web 服务器,不直接运行 Java。如果你用 Apache 做前端反向代理(如通过 mod_proxy_ajp 或 mod_proxy_http)对接 Tomcat/Jetty 等 Java 容器,那么 Prefork 参数只影响 Apache 自身的并发连接处理能力,不影响 Java 后端线程模型。
立即学习“Java免费学习笔记(深入)”;
- 此时更关键的是 Apache 能稳定维持多少到后端的连接(受
MaxRequestWorkers和后端连接池配置共同制约) - 若后端 Java 服务响应慢,Apache 子进程会长时间阻塞,容易耗尽 MaxRequestWorkers,表现为请求排队或 503 错误
- 建议搭配
mod_status开启服务器状态页,实时观察reading / sending reply / keepalive (k)等状态,辅助调优










