composer install 卡住是因为默认静默执行,不输出中间过程;用 -vvv 可查看 dns 解析、tls 握手、url 重定向、http 状态码等关键信息,快速定位网络、镜像源或系统 i/o 瓶颈。

为什么 composer install 卡住,光看终端没反应?
不是网络抽风,也不是你机器卡——是 Composer 默认静默执行,不输出中间过程。它可能正卡在 DNS 解析、TLS 握手、某个包的 hash 校验,甚至反复重试一个 404 的镜像 URL,但你不加参数,它就只打个点,或者停在 Downloading 不动。
实操建议直接用 -vvv(三 v)打开全量调试日志:
-
composer install -vvv—— 看清每一步:哪个包在拉、走的是哪个 URL、是否重定向、有没有 403/503 -
composer update -vvv --with-dependencies monolog/monolog—— 缩小范围时也别省掉-vvv,否则看不出是解析卡还是下载卡 - 如果日志里反复出现
Resolving dependencies超过 10 秒,基本可判定是版本约束太宽或求解器爆炸,和网络无关
怎么从 -vvv 日志里快速定位瓶颈?
-vvv 输出极长,但关键线索就藏在几类行里:找 GET、POST、connect、file_put_contents 和 Failed to open stream 这些词。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 看到大量
GET https://packagist.org/...或GET https://repo.packagist.org/...→ 还没切镜像源,或config -g repo.packagist没生效 - 反复出现
connect to packagist.org port 443 failed或TLS handshake timeout→ DNS 或 TLS 层问题,不是 Composer 错,要换 DNS(如1.1.1.1)或临时关 TLS(export COMPOSER_NO_TLS=1,仅限可信内网) - 日志停在某个
Downloading https://mirrors.aliyun.com/composer/.../package.zip超过 20 秒 → 镜像源本身限流,或本地磁盘写入慢(尤其 macOS APFS + Windows Defender 实时扫描) - 出现
file_put_contents(/tmp/...): failed to open stream→ 并发太高触发临时文件竞争,说明你设了parallel-downloads但没调低
常见误操作:开了 -vvv 却还是看不出问题
不是日志没用,是你没盯对地方。很多人执行了 composer install -vvv,但终端刷屏太快,一晃而过;或者被一堆 autoload 扫描日志淹没,漏掉了前面三行关键 HTTP 请求。
- 把日志导出再查:
composer install -vvv 2>&1 | tee install.log,然后grep -E "(GET|connect|TLS|failed)" install.log - 别信
--repository临时参数:加了--repository=https://mirrors.tuna.tsinghua.edu.cn/composer/却不配-vvv,根本看不到它到底走没走这个地址——临时切换必须带-vvv才能验证 - 删过
vendor和composer.lock后仍卡在某个包?-vvv会显示它其实在拉旧缓存里的元数据,此时必须先composer clear-cache,否则换源也白搭
哪些情况 -vvv 帮不上忙?
它能暴露网络和流程层的问题,但对某些底层阻塞无能为力。比如磁盘 I/O 已到瓶颈,-vvv 只会显示 “Writing zip archive”,然后停住 15 秒——你得配合系统工具看真实瓶颈。
- macOS 上用
fs_usage -f filesys | grep vendor看写入是否被防病毒软件拦截 - Linux 上用
strace -e trace=openat,write,fsync -p $(pgrep -f "composer install")看是不是卡在fsync - Windows 下如果用了 WSL2 + Windows 挂载卷,
-vvv显示一切正常,但实际解压速度只有本地的 1/5 —— 这时候得改用 WSL2 内部路径执行,而非跨系统挂载
-vvv 是起点,但别把它当终点。










