卡在downloading应调http.timeout,它控制dns解析、tls握手、首字节等待及整个http传输总时间,默认300秒,弱网建议设为600秒以上;与process-timeout无关。

卡住不等于超时,得先看它卡在哪一层——Resolving dependencies是DNS问题,Downloading归http.timeout管,Executing command才轮到process-timeout。调错参数白费劲。
卡在Downloading https://... 该改哪个timeout
这是HTTP下载阶段,比如拉packages.json或ZIP包,错误里常带cURL error 28或反复retry失败。它只认http.timeout(Composer 2.x),和process-timeout完全无关。
-
http.timeout控制DNS解析 + TLS握手 + 首字节等待 + 整个body传输的总时间,默认300秒,弱网下建议设为600或更高 - 项目级最稳:运行
composer config http.timeout 600,写入当前composer.json的config段,可提交、可复现 - 全局生效:用
composer config -g http.timeout 600,写入~/.composer/config.json - 临时覆盖优先级最高:设置环境变量
COMPOSER_HTTP_TIMEOUT=1200 composer install,适合CI调试 - ⚠️注意:
php -i | grep default_socket_timeout查出的PHP CLIdefault_socket_timeout若低于你设的http.timeout,会提前掐断连接——常见值是60,务必同步调高
报“The process timed out”该调哪一项
这是子进程执行太久被杀,比如git clone、unzip、跑post-install-cmd脚本。错误里一定含[RuntimeException] The process "" exceeded the timeout,加-vvv可看到最后那条命令。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
-
process-timeout控制单个外部命令最大执行时间,默认300秒,和HTTP完全无关 - 全局改:运行
composer config -g process-timeout 1800(30分钟),写入~/.composer/config.json - 项目级改:直接在
composer.json顶层加"config": {"process-timeout": 1200} - CI环境建议用环境变量兜底:
COMPOSER_PROCESS_TIMEOUT=2000,某些CI runner默认PHP配置可能覆盖掉配置文件 - 设为0表示禁用,但不推荐长期使用——一旦网络卡死或镜像不可用,命令会无限挂起
Composer 2.2+ 新增的 http-basic-timeout 怎么用
这个参数专门控单次HTTP请求的连接+读取时限,默认仅60秒,比http.timeout更细粒度。旧版本不支持,别白试。
- 临时生效:
composer install --http-basic-timeout=300(单次请求最长等5分钟) - 永久生效:运行
composer config -g http-basic-timeout 300 - 它和
http.timeout是并行生效的:前者管单次GET,后者管整个HTTP生命周期;只调一个可能仍失败 - 例如解析快但下载慢,就得同时调高
http-basic-timeout和http.timeout
脚本执行超时不是Composer管的
你在composer.json的scripts里写的PHP脚本,超时由PHP自身控制,config.timeout或process-timeout都不影响它。
- 最常用方式:
php -d max_execution_time=0 composer install,临时绕过PHP限制 - 脚本内部可用
set_time_limit(1200),但必须在逻辑开始后尽早调用,否则可能被后续代码覆盖 - CI中要显式指定:
php -d max_execution_time=900 composer install --no-interaction,避免依赖runner默认值 - 检查
php.ini是否禁用了max_execution_time(如disable_functions里写了set_time_limit)
真正卡住时,别只盯着timeout——内存不足(memory_limit )、DNS污染、SSH密钥未配置、私有Git仓库未授权、WSL2/NTFS卷I/O阻塞,都可能伪装成超时。先<code>composer install -vvv看最后一行命令,再决定动哪根弦。










