答案是临时执行php -d memory_limit=2G composer install,该命令将PHP内存限制提至2GB且仅作用于当前命令,顺序必须为php -d在前、composer在后,不可改php.ini或依赖swap分区。

Composer 安装卡在 “Loading composer repositories” 或直接报 Allowed memory size exhausted,不是网络问题,也不是源慢,是 PHP CLI 进程被默认 memory_limit 卡死——临时加 php -d memory_limit=2G 就能立刻跑通,别改 php.ini,也别碰 swap。
php -d memory_limit=2G 必须写在 composer 命令前面
这个参数只作用于当前 PHP 进程,顺序错了就完全无效:
-
php -d memory_limit=2G composer install✅ 正确 -
composer install -d memory_limit=2G❌ Composer 把-d当作子命令忽略 -
php composer install -d memory_limit=2G❌ 同上,-d不是 Composer 参数
Linux/macOS 直接执行即可;Windows PowerShell 用户必须加引号:php -d "memory_limit=2G" composer install,否则 - 被识别为 PowerShell 参数。
which composer 返回 /usr/bin/composer?用绝对路径
Ubuntu、Debian 等系统常把 composer 设为 shell wrapper(包装脚本),它会忽略 -d 参数:
- 运行
which composer,如果输出是/usr/bin/composer,说明你调用的是 wrapper - 改用绝对路径:
php -d memory_limit=2G /usr/bin/composer install - 或直接用
composer.phar(如php -d memory_limit=2G composer.phar install)
Wrapper 本质是 bash 脚本,不支持透传 PHP 启动参数,这是最常被忽略的失效原因。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
COMPOSER_MEMORY_LIMIT 环境变量不绕过 PHP 限制
这个变量只控制 Composer 自身逻辑(比如依赖求解器缓存大小),**不是 PHP 内存上限**:
-
COMPOSER_MEMORY_LIMIT=2G php -d memory_limit=2G composer install✅ 双保险,尤其对composer update -
COMPOSER_MEMORY_LIMIT=2G composer install❌ 如果 PHP 进程本身在 128MB 就崩溃,这个变量根本没机会读到 - Linux/macOS 写法:等号前后不能有空格,
COMPOSER_MEMORY_LIMIT=2G composer install - Windows CMD:
set COMPOSER_MEMORY_LIMIT=2G && composer install
v2.2+ 版本还会主动拒绝 memory_limit=-1,所以 2G 是 CI 验证过的稳妥值,单位必须是 G(不是 GB 或 M),1.5G 不被识别,得写 1536M。
为什么 --no-dev 和 --optimize-autoloader 救不了 solver 阶段
内存峰值往往出现在依赖求解(solver)阶段,它发生在是否安装 dev 包之前:
-
--no-dev只跳过require-dev的安装,但所有require-dev条目仍参与依赖图构建和版本冲突检测 -
--optimize-autoloader(或-o)只影响最后生成 autoload 映射,不缓解前期解析压力 - 真正降 solver 负担的是收紧版本约束(如把
"monolog/monolog": "^1.0 || ^2.0"改成"^2.12")、删掉无用包、升级到 Composer 2.9.6(已优化大项目内存使用)
如果你的 composer.json 里存在宽松约束或大量插件,哪怕加了 3G,solver 仍可能超时回退——这时候不是内存问题,是依赖建模本身太重。

















