phpEnv启动失败提示“系统资源不足”的本质是Windows内核级资源(如Non-paged Pool、句柄数)被Apache/Nginx+多PHP版本+MySQL/Redis等服务叠加耗尽,而非硬盘或CPU不足;需关闭冗余服务、降低各服务内存参数、禁用开机自启并手动按需启动。

phpEnv 启动失败提示“系统资源不足”,本质是 Windows 同时加载 Apache/Nginx + 多个 PHP 版本 + MySQL/Redis 等服务时,内存和句柄数超限,不是硬盘或 CPU 不够——重点在服务叠加策略。
为什么 phpEnv 一开就报“系统资源不足”
phpEnv 默认勾选「启动全部服务」,但 Windows 7/10/11 在无管理员提权、未预分配足够非分页池(Non-paged Pool)的情况下,同时运行 Apache + PHP-FPM(多版本)+ MySQL + Redis 会迅速耗尽内核对象句柄(Handle)和会话内存。这不是 php.ini 的 memory_limit 问题,而是 Windows 内核级资源枯竭,典型表现是:服务卡在“正在启动…”、netstat -ano 显示端口未监听、任务管理器中多个 httpd.exe 或 mysqld.exe 进程处于挂起状态。
- Windows 默认 Non-paged Pool 通常仅 256–512MB,而 phpEnv 6.0+ 启动全套服务需至少 700MB
- 每个 PHP-FPM worker 进程默认占用约 8–12MB 内存,若开启 PHP 7.4 + 8.1 + 8.3 三版本,光 PHP 就占 60MB+ 基础内存
- MySQL 8.0 默认配置(
innodb_buffer_pool_size = 128M)在 Windows 上实际内存占用常翻倍,尤其启用查询缓存后
关闭冗余服务:只留当前开发用的那一套
phpEnv 的「多版本共存」是优势,但不是所有版本都要同时跑。进 phpEnv 主界面 → 右键顶部「服务栏」→ 「服务管理」→ 取消勾选不用的服务:
- Web 服务器:只启用
Apache或Nginx其中一个(推荐 Apache,phpEnv 对其兼容性更稳) - PHP 版本:只启用你当前项目依赖的那一个(比如 Laravel 11 要求 PHP 8.2+,那就关掉 7.4 和 8.0)
- 数据库:如果不用 MySQL,就把
MySQL和MySQL-CLI全部停用;改用 SQLite 或外部 DB 就更不用开本地 MySQL - 缓存服务:
Redis和Memcached默认不必要,除非你代码里真调了new Redis()或memcache_connect()
改完点「应用」,再点「启动」。多数情况下,服务能秒启成功。
立即学习“PHP免费学习笔记(深入)”;
降低单个服务内存水位:避免 Windows 内核对象溢出
即使只开一套服务,Windows 仍可能因单服务吃太猛而崩。关键调整项不在 php.ini,而在各服务自己的配置文件:
- Apache:
conf\httpd.conf中找到ThreadsPerChild,从默认 256 改为64;再加一行MaxConnectionsPerChild 1000,防连接累积泄漏 - MySQL:
my.ini(位于 phpEnv\MySQL\ 目录下)中把innodb_buffer_pool_size从 128M 改成64M,并注释掉query_cache_type和query_cache_size(MySQL 8.0+ 已废弃,留着反而占资源) - PHP-FPM:
php\php-version\etc\php-fpm.d\www.conf中设pm.max_children = 10(默认 50),pm.start_servers = 2,大幅降低并发进程数
改完配置必须重启对应服务,不是点「重载」,是「停止 → 启动」。否则 Windows 不会释放旧进程句柄。
开机不自启 + 手动按需启动
phpEnv 的「开机自启」功能对开发者毫无意义,只会让资源在后台空耗。右键系统托盘 phpEnv 图标 → 「设置」→ 关闭「开机自动启动服务」。之后只在需要调试时,手动点「启动」,用完立刻「停止」。
更省事的做法:用 phpEnv 自带的命令行工具,在终端里精准控制。例如只启动 Apache + PHP 8.2:phpenv service start apache php82;停掉 MySQL:phpenv service stop mysql。这样既快又干净,不会残留僵尸进程。
真正卡住的点从来不是「怎么调大内存」,而是 Windows 内核对象(Handles / PagedPool / NonPagedPool)这些看不见的资源被 phpEnv 的默认全开策略悄悄榨干了。关服务、压参数、手动启停,三步做完,90% 的「系统资源不足」就消失了。



















