phpenv中apache并发上不去是因为默认使用mpm_event模块,需修改threadsperchild、serverlimit和maxrequestworkers参数,并调优threadstacksize、php-fpm的pm.max_children及mysql的max_connections。

phpEnv 里 Apache 并发上不去,不是改个 MaxClients 就完事——它压根不认这个参数,因为 phpEnv 默认用的是 mpm_event 模块,而 MaxClients 是 mpm_prefork 的旧名,已弃用。
确认 phpEnv 当前 MPM 类型
phpEnv 是 Windows 下的集成环境,Apache 版本多为 2.4.x,默认启用 mpm_event(非 mpm_prefork)。直接搜 MaxClients 会找不到或无效:
- 打开命令行,进 phpEnv 安装目录下的
apache24\bin,执行:httpd -V | findstr "MPM" - 输出类似
MPM: event即确认生效;若显示prefork,说明被手动改过或版本极老 - 别信配置文件里有没有注释掉
LoadModule mpm_prefork_module——httpd -V输出才是唯一依据
在 phpEnv 中正确修改并发参数(event MPM)
phpEnv 的 Apache 配置主入口是 apache24\conf\httpd.conf,但 MPM 参数实际写在 conf\extra\httpd-mpm.conf。必须确保该文件被包含且对应模块块启用:
- 检查
httpd.conf中这行是否取消注释:Include conf/extra/httpd-mpm.conf - 打开
conf/extra/httpd-mpm.conf,找到<ifmodule mpm_event_module></ifmodule>块 - 只改以下三项(其他如
StartServers可调但非瓶颈):ThreadsPerChild 50(每个子进程线程数,Windows 下建议 32–64,超 100 易触发 I/O 等待)ServerLimit 8(最大子进程数,Windows 下不宜超 16,否则调度开销陡增)MaxRequestWorkers 400(总并发上限 =ServerLimit × ThreadsPerChild,设 400 已足够应付多数 PHP 场景) - 删掉或注释掉同文件中
<ifmodule mpm_prefork_module></ifmodule>块里的MaxClients——它对 event 无意义,还可能干扰加载
Windows 下绕不过去的系统级限制
即使 Apache 配置调高,Windows 默认单进程句柄数上限(16384)和线程栈大小(默认 1MB)会卡死并发。常见现象是:日志出现 Cannot create thread 或请求到一半就断连:
- 在
httpd.conf的Global区域(不在任何<ifmodule></ifmodule>内)加一行:ThreadStackSize 524288(设为 512KB,减小单线程内存占用) - 确保 phpEnv 启动 Apache 时以足够权限运行(右键快捷方式 → “以管理员身份运行”),否则无法突破句柄限制
- 检查任务管理器 → 性能 → “句柄数”,Apache 进程若长期接近 10000+,说明已逼近上限,此时再调高
MaxRequestWorkers无用
真正卡并发的往往不是 Apache 配置本身,而是 PHP-FPM(phpEnv 默认用它)的 pm.max_children 和 MySQL 的 max_connections 没同步调优。比如你把 MaxRequestWorkers 设到 800,但 PHP-FPM 只允许 32 个子进程,那剩下 768 个请求永远在排队等 PHP 处理器 —— 这类隐性瓶颈比参数写错更难排查。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











