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.json的config段中添加:"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、还是换镜像源。










