composer卡在resolving dependencies是sat求解器暴力回溯版本约束所致,并非网络问题;此时换镜像、清缓存、调超时均无效,应加-vvv运行定位卡点,用composer why-not直击冲突链,或通过--no-dev、删宽泛约束等方式收敛求解空间。

Composer卡在Resolving dependencies是SAT求解器死循环,不是网络问题
看到终端停在Resolving dependencies不动,说明 Composer 还没发任何 HTTP 请求,纯粹在本地暴力回溯版本约束——换镜像、清缓存、调超时全无效。
常见诱因包括:composer.json里写了过于宽泛的约束(如"^1.0 || ^2.0")、引入dev-main私有包导致依赖图成环、PHP 内存不足(CLI 默认常为 128M)触发 OOM Killer 静默杀进程。
实操建议:
- 加
-vvv运行:php -d memory_limit=3G composer update -vvv,紧盯最后几行是否反复出现Trying: vendor/package或Aborting, because - 临时禁用插件验证是否拖累:
composer update --no-plugins - 检查是否有
require-dev里的包反向拉取了生产环境不该有的巨量依赖,用composer depends --tree vendor/package查闭环链路
Executing command卡住大概率是子进程挂起,process-timeout才生效
停在Executing command (CWD: )这行,说明 Composer 已完成依赖解析,正执行post-install-cmd、git clone或unzip等子命令——此时http.timeout完全不生效。
典型场景:私有 Git 仓库用 SSH 地址(git@xxx)但ssh-agent未启动或 key 未添加,git clone卡在密码提示;WSL2 下启用元数据支持后git clone因 symlink 解析缓慢;某些插件(如phpstan)在安装时加载大量类,吃光内存。
实操建议:
- 设
COMPOSER_PROCESS_TIMEOUT=1200或配置process-timeout=1200 - 手动执行卡住的命令验证,比如
git ls-remote -h git@github.com:user/repo.git - WSL2 用户可临时关闭元数据支持:
wsl --shutdown && wsl -u root sysctl -w fs.protected_regular=0(仅调试用)
Generating autoload files无响应多因文件系统层问题
停在Generating autoload files后不动,不是 Composer 逻辑卡死,而是文件系统操作受阻。WSL2 下 symlink 解析慢、APCu 未启用 CLI 模式、vendor/权限异常都可能触发。
现象是 CPU 占用低、无网络活动、strace -e trace=openat,stat,readlink能看到大量 symlink 相关系统调用阻塞。
实操建议:
- 确认 APCu 是否启用:
php -m | grep apcu,CLI 模式需单独配置apc.enable_cli=1 - 检查
vendor/目录权限:ls -ld vendor,确保当前用户有读写权限 - WSL2 用户可尝试关闭 symlink 支持:
echo -e "[wsl2]\nfilesystem.defaultOwner = \"$(id -u):$(id -g)\"" >> /etc/wsl.conf && wsl --shutdown
退出码137基本就是OOM Killer干的,改memory_limit没用
echo $?返回137,说明进程被内核 SIGKILL(信号9)强制终止,不是 PHP 报错。此时php -d memory_limit=2G完全无效——OOM 是内核在进程级杀的,PHP 还没来得及报Allowed memory size exhausted。
真正要查的是dmesg -O | grep -i "killed process",看到Out of memory: Kill process 12345 (php)就实锤。若swapon --show无输出,说明 Swap 根本没启用。
实操建议:
- 快速补 Swap:
sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile && sudo chown root:root /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile - 压内存峰值更有效:
--no-dev跳过 dev 包、-o优化 autoloader、--prefer-dist避免 git clone - 容器环境别指望宿主机 Swap,必须通过
docker run --memory=2g显式限制并预留余量
-vvv最后几行,所有操作都是蒙的。最常被忽略的是:私有包的dev-main引入循环、WSL2 的 symlink 行为差异、以及插件在 CLI 模式下未启用 APCu 导致 autoload 生成极慢。这些点不手动验证,光调参数只会让问题更隐蔽。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











