信息发布→ 登录 注册 退出

如何在Composer中配置process-timeout以解决大文件下载中断问题?

发布时间:2026-01-09

点击量:
Composer默认process-timeout为300秒,超时会导致下载或解压中断;可全局设为1800秒、项目级配置3600秒,或临时用COMPOSER_PROCESS_TIMEOUT=7200或--timeout=7200覆盖。

Composer 默认的 process-timeout 是 300 秒(5 分钟),遇到大包(如 laravel/framework 带完整 vendor 的 dist 包、或某些含二进制资源的私有包)时,下载或解压卡住超过这个时间就会被强制终止,报错类似:proc_open(): fork failed - Cannot allocate memory 或直接显示 Failed to download ... The process timed out。调高它能解决多数因超时导致的中断,但不能掩盖内存/IO 真实瓶颈。

全局设置 process-timeout(影响所有项目)

适用于经常操作大包、CI 环境或本地网络较慢的场景。修改的是 Composer 的全局配置文件,对后续所有 composer install / composer update 生效:

  • 运行命令:composer config -g process-timeout 1800(单位为秒,这里设为 30 分钟)
  • 等价于手动编辑 ~/.composer/config.json,确保其中包含:
    {
        "config": {
            "process-timeout": 1800
        }
    }
  • 注意:该值不会覆盖项目级配置;若项目根目录有 composer.json 中定义了 "config": {"process-timeout": ...},则以项目级为准

项目级设置 process-timeout(仅当前项目生效)

更推荐的方式,避免污染全局环境,也方便团队统一配置和版本控制:

  • 在项目根目录的 composer.jsonconfig 段中添加:
    "config": {
        "process-timeout": 3600
    }
  • 执行 composer update --lock 或任意 composer install 后,该配置即生效
  • 如果项目依赖大量二进制扩展(如 ext-mongodb 的预编译包),建议设到 3600(1 小时)以上;但不建议无限制设成 0(表示永不超时),因为可能掩盖挂起或死锁问题

临时覆盖 timeout(单次命令生效)

适合调试或 CI 脚本中按需调整,不改动任何配置文件:

  • 使用环境变量:COMPOSER_PROCESS_TIMEOUT=7200 composer install
  • 或用命令行参数:composer install --timeout=7200(注意是 --timeout,不是 --process-timeout
  • ⚠️ 注意:命令行参数优先级最高,会覆盖 composer.json 和全局配置;但 --timeout 在较老版本 Composer(
  • 常见误写:composer install --process-timeout=7200 —— 这个参数不存在,会被忽略

真正卡住的时候,光调高 process-timeout 只是“拖时间”,还得检查是否同时存在内存不足(fork failed)、磁盘空间不够、或远程仓库响应极慢。建议搭配 composer install -v 查看卡在哪一步,再决定是调 timeout、加 --prefer-dist、还是换镜像源。

标签:# 镜像源  # 还得  # 不存在  # 适用于  # 就会  # 的是  # 调高  # 命令行  # 死锁  # 设为  # 命令行参数  # laravel  # 配置文件  # 解压  # 环境变量  # ai  # mongodb  # composer  # go  # json  # js  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!