apache最大并发连接数调整取决于mpm类型:prefork受hard_server_limit硬编码限制(如phpenv上限256),event/worker则可按内存与threadsperchild×serverlimit精算;须先用httpd -m确认模块,再同步调优配套参数及系统限制。

先确认当前使用的 MPM 模块
运行命令查看实际加载的模块:
httpd -l | grep mpm
或(带详细模块列表):
httpd -M | findstr mpm
输出若只有 mpm_prefork.c,说明你处于进程模型——每个请求独占一个进程,无法靠线程扩容;若看到 mpm_event.c 或 mpm_worker.c,才有调高并发的真正空间。
prefork 模式下可安全调整的参数
这是最常见也最受限的场景(尤其 Windows 二进制包和 phpEnv)。HARD_SERVER_LIMIT 通常硬编码为 256,MaxRequestWorkers 超过 256 会被自动截断,日志中会出现警告:
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
WARNING: MaxRequestWorkers of 300 exceeds ServerLimit value of 256
此时有效上限就是 256。可行配置(写在 httpd-mpm.conf 或主配置文件的 <ifmodule mpm_prefork_module></ifmodule> 块内):
- MaxRequestWorkers 256(显式设为上限,避免误导)
- StartServers 5(启动即创建 5 个进程,避免冷启动延迟)
- MinSpareServers 5、MaxSpareServers 10(控制空闲进程池,减少资源浪费)
- MaxConnectionsPerChild 1000(防止 PHP 内存泄漏累积,比默认 0 更稳妥)
event/worker 模式下可突破 256 的调优
适用于 Linux 下自行编译或发行版提供的 Apache(如 Ubuntu/Debian 的 apache2-bin、CentOS 的 httpd)。需确保模块已启用且无依赖冲突:
- 检查
LoadModule mpm_event_module modules/mod_mpm_event.so是否启用(注释去掉) - 确认
httpd -M输出含mpm_event,且无 APR 版本报错 - 在
<ifmodule mpm_event_module></ifmodule>块中调整:
ThreadsPerChild 25(每个子进程线程数)
MaxRequestWorkers 1000(总并发 = ThreadsPerChild × 进程数,受内存制约)
MinSpareThreads 75、MaxSpareThreads 250(维持可用线程池)
配套优化不能少
单纯调高数字不等于性能提升,反而可能引发雪崩。务必同步做这些事:
- KeepAlive Off(prefork 下长连接会卡住整个进程,短连接更高效)
-
启用 OPcache(php.ini 中设
opcache.enable=1、opcache.memory_consumption=128) -
缩短脚本超时(
max_execution_time=30,避免单请求拖垮全部进程) -
禁用未用模块(如
mod_status、mod_info,减少内存开销)










