apache maxclients与maxrequestsperchild需按服务器资源和业务特征科学计算:maxclients=(可用内存×0.8)÷单进程内存并向上取整;maxrequestsperchild按内存规模设100–1000;serverlimit、startservers等参数须同步调整。

设置 Apache 的 MaxClients 和 MaxRequestsPerChild 不能靠经验填数字,关键在于匹配服务器资源与业务特征。这两个参数在 prefork MPM 模式下尤其重要——每个进程只处理一个请求,设高了吃光内存,设低了排队卡顿。
先确认你用的是 prefork 模式
运行命令:
apachectl -l | grep mpm
如果输出含 mpm_prefork_module,才适用本文参数逻辑。若看到 worker 或 event,请停止调整这两个参数——它们不生效。
MaxClients:不是越大越好,而是“够用+留余量”
它本质是并发请求数上限,等于同时存活的 httpd 进程数。超限请求会排队等待,造成延迟,但盲目调高会导致 OOM(内存溢出)。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 查单个 httpd 进程真实内存占用(KB):
ps -o rss= -C httpd | awk '{sum += $1} END {print int(sum/NR)}' - 查当前可用内存(MB):
free -m | awk '/Mem:/ {print $7}' - 按 80% 安全水位计算:
MaxClients ≈ (可用内存 × 0.8) ÷ 单进程内存(MB) - 结果向上取整到 16、32、64 等便于管理的值,并确保 ≤ ServerLimit(需同步修改)
MaxRequestsPerChild:防内存缓慢泄漏的关键开关
设为 0 表示进程永不退出,长期运行后可能因模块缺陷或 PHP 扩展累积内存;设太小又频繁 fork,增加 CPU 开销。推荐非零有限值。
- 轻量服务器(≤4GB 内存):100–250
- 中型服务器(4–16GB):250–500
- 大型服务器(≥16GB):500–1000
- 若站点大量使用老旧 PHP 扩展或自定义模块,建议从 200 起步,观察 24 小时内存趋势再微调
配套参数必须协同调整
单独改 MaxClients 或 MaxRequestsPerChild 效果有限,以下三组需联动:
- ServerLimit:必须 ≥ MaxClients,且修改后需完全 stop + start(不能仅 reload)
- StartServers / MinSpareServers:建议设为 MaxClients 的 1/5~1/3,避免冷启动时响应迟滞
- MaxSpareServers:建议设为 MaxClients 的 1/2 左右,防止空闲进程过多浪费资源










