apache运行模式由mpm决定,主流有prefork、worker、event三种:prefork适合mod_php等非线程安全场景,稳定但内存开销大;worker为多进程多线程模型,兼顾性能与兼容性;event基于事件驱动,专为高并发和长连接优化,是apache 2.4+推荐默认模式。

Apache 运行模式由 MPM(Multi-Processing Module) 决定,主流有三种:prefork、worker、event。配置本质是启用对应 MPM 模块并调整其参数,需结合操作系统、负载特征和所用模块(如 mod_php)综合选择。
一、确认当前运行模式
执行以下命令查看已加载的 MPM:
httpd -l # CentOS/RHEL 系统 apache2 -l # Ubuntu/Debian 系统
输出中若含 prefork.c,说明当前为 prefork 模式;含 worker.c 或 event.c 则分别为对应模式。
也可查编译参数:
httpd -V | grep -i mpm
二、选择合适模式再配置
✅ prefork(适合传统 PHP + mod_php 场景)
- 适用场景:PHP 拓展未线程安全(如旧版 mod_php)、模块兼容性要求高、稳定性优先。
- 特点:每个进程只处理 1 个请求,进程间完全隔离,内存占用高,不擅长高并发。
-
关键配置(
httpd-mpm.conf或mpm_prefork_module块内):
<ifmodule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 150 # 替代旧版 MaxClients,决定最大并发连接数
MaxConnectionsPerChild 0 # 0 表示子进程永不死(适合稳定环境)
</ifmodule>
⚠️ 注意:
MaxRequestWorkers是核心限制值。估算公式:总可用内存 ÷ 单个 Apache 进程平均内存 ≈ 合理值(例如 2GB 内存 / 20MB ≈ 100)
Apache Superset Dashboard and SQL Exploration Skill下载Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
✅ worker(适合高并发、内存受限环境)
- 适用场景:使用线程安全的 PHP(如 PHP-FPM + mod_proxy_fcgi)、支持多线程模块。
- 特点:多进程+多线程,资源更省,但单个线程崩溃可能影响同进程其他线程。
- 关键配置:
<ifmodule mpm_worker_module>
StartServers 2
MaxRequestWorkers 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25 # 每个子进程启动 25 个线程
MaxConnectionsPerChild 0
</ifmodule>
?
MaxRequestWorkers = 子进程数 × ThreadsPerChild,实际并发能力取决于此乘积。
✅ event(Apache 2.4+ 推荐,默认模式)
- 适用场景:现代部署(尤其搭配 PHP-FPM、反向代理)、长连接(KeepAlive)较多、追求吞吐与资源效率。
- 特点:在 worker 基础上优化了 KeepAlive 连接管理——空闲连接交由专门线程处理,工作线程可释放去服务新请求。
- 关键配置(与 worker 类似,但更高效):
<ifmodule mpm_event_module>
StartServers 2
MaxRequestWorkers 200
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxConnectionsPerChild 0
</ifmodule>
✅ event 要求启用
mod_proxy和mod_proxy_fcgi才能发挥优势(如转发 PHP 请求给 FPM)。
三、启用指定 MPM 的方法
编译时指定(首次安装)
./configure --with-mpm=event \
--enable-so \
--enable-rewrite \
...
make && make install
运行时切换(Apache 2.4+ 支持动态加载)
确保 httpd.conf 中加载对应模块(通常默认已启用):
LoadModule mpm_event_module modules/mod_mpm_event.so # 注释掉其他 mpm_*.so 行,只保留一个
? 修改后必须重启 Apache:
systemctl restart httpd # RHEL/CentOS systemctl restart apache2 # Ubuntu/Debian
四、验证与调优提示
- 查看当前生效的 MPM:
httpd -V | grep -i 'mpm\|thread'
- 监控实际并发数:
curl -s http://localhost/server-status?auto | grep 'BusyWorkers\|IdleWorkers'
- 开启
mod_status并配置访问权限才能看到上述状态页。 - 生产环境务必关闭
ServerTokens和ServerSignature,避免暴露 MPM 类型等细节。
不复杂但容易忽略:MPM 配置生效依赖于模块是否真正被加载,且 MaxRequestWorkers 等值受系统 ulimit -n(文件描述符上限)制约,必要时需同步调高。











