composer默认高并发(5–10)会触发国内镜像限流、dns阻塞和tcp争抢,导致下载卡顿或超时;推荐全局设为2:composer config -g repos.packagist.org.concurrent-downloads 2。

Composer为什么默认并发太高反而拖慢镜像拉取
Composer 2.x 默认启用 parallel-downloads(通常为 5–10),看似能加速,实则在多数国内网络环境下会触发镜像源限流、TCP 连接争抢、DNS 解析阻塞,甚至被临时封禁 IP。典型表现是:Installing dependencies 卡在 Downloading... 阶段,curl: (28) Operation timed out 或 Connection refused 错误频发。
根本原因不是带宽不够,而是高并发把本地 DNS 缓存打穿、镜像服务器反爬策略生效、或运营商对短时密集连接做 QoS 限速。
- 国内主流镜像(如阿里云、腾讯云、华为云)普遍对单 IP 每秒请求数(QPS)设硬限制,超限直接 429 或静默丢包
-
composer install的依赖解析本身是串行的,下载阶段才并行——但 Composer 并不会智能降级,它只管发请求 - 并发数 >3 时,
file_get_contents()+ cURL 的 PHP 线程竞争会导致 CPU 和内存抖动,尤其在 CI 环境中更明显
如何用 config 命令安全降低并发上限
别改 composer.json 或写脚本封装——Composer 提供了全局配置项 config,直接生效且不污染项目。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 执行
composer config -g repos.packagist.org.concurrent-downloads 2,将全局并发压到 2(推荐值) - 若仅对当前项目调整,去掉
-g:composer config repos.packagist.org.concurrent-downloads 2 - 验证是否生效:运行
composer config -g | grep concurrent,应输出"concurrent-downloads": 2 - 注意:该配置只影响 Composer 2.2+;低于此版本需升级或改用
COMPOSER_PARALLEL_DOWNLOADER环境变量
配合镜像源使用时的三个关键细节
单纯调低并发不够,必须和镜像源行为对齐,否则仍可能失败。
- 阿里云镜像(
https://mirrors.aliyun.com/composer/)要求packagist.org配置项存在,不能删掉或注释掉原始源,否则concurrent-downloads不生效 - 腾讯云镜像(
https://mirrors.cloud.tencent.com/composer/)对 User-Agent 敏感,建议加composer config -g http-header "User-Agent: Composer/2.x"避免被拦截 - 如果用了私有 Packagist(如 Satis 或 Private Packagist),需确认其后端 Nginx/Apache 是否设置了
limit_req或max_connections,此时并发上限还得同步下调
CI 环境下还要关掉自动更新检查
GitHub Actions、GitLab CI 等场景下,Composer 默认每小时检查一次自身更新,这个检查走的是 GitHub API,不受镜像配置影响,且会额外发起 3–5 个并发请求,干扰主流程。
- 在 CI 脚本开头加
export COMPOSER_NO_INTERACTION=1和export COMPOSER_DISABLE_TTY=1 - 禁用自动更新检查:
composer config -g disable-tls false && composer self-update --no-interaction --quiet(先确保已更新到最新版),再加composer config -g notify-on-install false - 更彻底的做法:CI 中使用
--no-suggest --no-progress --prefer-dist --optimize-autoloader全套参数,减少非必要 IO 和网络交互
并发不是越多越好,真正卡顿的地方往往藏在 DNS、镜像策略和 Composer 自身的隐式行为里。调参前先看 composer install -v 的详细日志,比盲目加 --prefer-dist 更管用。










