调整maxrequestworkers需结合mpm模式、内存、系统限制及后端服务协同优化:prefork下为最大进程数,event下为最大并发线程数,worker下为threadsperchild×serverlimit;按可用内存×0.7~0.8÷单进程/线程rss估算合理值,并同步调优serverlimit、startservers等参数,同时确保ulimit、tomcat maxthreads、php-fpm pm.max_children等匹配。

调整 Apache 的 MaxRequestWorkers 是控制并发连接数最直接的方式,但它不是简单改个数字就能生效——必须结合内存、MPM 模式、系统限制和后端服务协同调整。
先确认你用的是哪种 MPM 模式
Apache 不同 MPM 对 MaxRequestWorkers 的含义不同:
- prefork:每个请求对应一个独立进程,MaxRequestWorkers = 最大子进程数,内存开销大,适合稳定性优先场景
- event(推荐):基于线程+事件模型,MaxRequestWorkers = 最大并发线程数,资源利用率高,适合高并发 HTTP/HTTPS 服务
- worker:多进程+多线程混合,MaxRequestWorkers = ThreadsPerChild × 子进程数上限,需同时调优 ThreadsPerChild 和 ServerLimit
运行 httpd -V | grep -i mpm 或 apache2ctl -V | grep -i mpm 查看当前启用的 MPM。
根据内存算出合理值
盲目设高会导致 OOM;设低则排队、503、响应延迟飙升。核心公式是:
MaxRequestWorkers ≈ (可用内存 × 0.7~0.8) ÷ 单进程/线程平均 RSS
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
- 查可用内存:
free -h看 “available” 列,预留 20% 给系统和其他服务 - 查单进程内存:
ps -o pid,rss,comm -C httpd | awk '{sum+=$2} END {printf "%.0f MB\n", sum/NR/1024}'(prefork 下取中位数更准) - 示例:16GB 机器,可用约 11GB,实测单 httpd 进程占 32MB → 11×1024÷32 ≈ 350,建议设为 300~320(留余量)
修改配置并同步关联参数
在 mpm_prefork.conf 或 mpm_event.conf 中调整,不要写在主配置文件末尾或 .htaccess 里:
- 确保 ServerLimit ≥ MaxRequestWorkers(prefork/event 下必须显式设置,否则重启报错)
- prefork 模式下配套调:
StartServers 32(≈ MaxRequestWorkers × 0.1)MinSpareServers 16(≈ ×0.05)MaxSpareServers 96(≈ ×0.3) - event 模式下关注:
ThreadsPerChild 25(建议 25–75,避免过高引发调度抖动)MaxConnectionsPerChild 10000(防内存缓慢泄漏)
改完执行 apachectl configtest 验证语法,再 systemctl reload apache2(或 httpd)热加载。
别忘了系统和后端的匹配
Apache 调高了,但其他环节卡住,照样白搭:
- 检查系统限制:
ulimit -n至少 65536,sysctl net.core.somaxconn≥ 65535 - 若反向代理 Java 应用(如 Tomcat),Tomcat 的
maxThreads必须 ≥ Apache 的 MaxRequestWorkers - 若代理 PHP-FPM,
pm.max_children也应 ≥ 该值,且rlimit_files在 php-fpm pool 中设够 - 开启
KeepAlive On并设KeepAliveTimeout 5、MaxKeepAliveRequests 100,减少重复建连压力
调优后通过 curl "http://localhost/server-status?auto" | grep -E "(Busy|Idle)Workers" 实时观察负载分布,BusyWorkers 长期 > 90% 就说明仍不足。










