apache在linux中使用prefork模式需启用mod_mpm_prefork模块、禁用其他mpm,并配置startservers、minspareservers、maxspareservers、maxrequestworkers和maxconnectionsperchild等参数,最后验证mpm类型为prefork且进程数符合预期。

Linux 中配置 Apache 使用 prefork 进程模型,核心是确保 mod_mpm_prefork 模块被启用、其他 MPM 模块被禁用,并正确设置 prefork 相关参数。整个过程不涉及重新编译(除非你当前安装的是 event 或 worker 且未提供 prefork 模块),主要靠配置文件调整。
确认 prefork 模块是否可用
先检查 Apache 是否已编译支持 prefork:
- 运行
httpd -M | grep mpm或apachectl -M | grep mpm - 若输出中包含
mpm_prefork_module (shared),说明模块已加载;若只有mpm_event_module或mpm_worker_module,需启用 prefork 模块或重装(见下一步) - 若无任何 mpm 模块输出,可能需安装完整版 httpd(如 CentOS/RHEL 上安装
httpd-devel或确认httpd包含 MPM 支持)
启用 prefork 并禁用其他 MPM
编辑 MPM 加载配置文件(路径因发行版略有差异):
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- RHEL/CentOS 7+/Rocky/AlmaLinux:修改
/etc/httpd/conf.modules.d/00-mpm.conf - Ubuntu/Debian:修改
/etc/apache2/mods-available/mpm_prefork.load并禁用其他 mpm(如a2dismod mpm_event mpm_worker) - 确保只启用 prefork 行,注释掉其余两行:
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so#LoadModule mpm_worker_module modules/mod_mpm_worker.so#LoadModule mpm_event_module modules/mod_mpm_event.so
配置 prefork 工作参数
在主配置文件(/etc/httpd/conf/httpd.conf 或 /etc/httpd/conf.d/mpm.conf)中添加或修改以下区块:
<ifmodule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 256
MaxConnectionsPerChild 0
</ifmodule>
关键说明:
-
MaxRequestWorkers(旧版叫MaxClients)是并发上限,决定最多能同时处理多少请求;默认 256,如需调高(比如设为 1000),必须同步增大ServerLimit(需放在同一区块内,且不能超过系统资源允许值) -
MaxConnectionsPerChild 0表示子进程永不退出;设为非零值(如 10000)可防止内存泄漏累积,适合长期运行环境 -
StartServers不宜过大,避免启动时瞬间占用过多内存或与后端(如 Tomcat)建立过多空闲连接
验证并重启服务
完成配置后执行:
-
httpd -t或apachectl configtest检查语法是否正确 -
systemctl restart httpd(RHEL/CentOS)或systemctl restart apache2(Debian/Ubuntu) - 再次运行
httpd -V | grep MPM,确认输出为Server MPM: prefork - 用
ps aux | grep httpd观察进程数,正常应看到多个独立的httpd进程(而非线程形式)










