composer 默认内存限制为1.5g,优先于php.ini设置,可通过composer_memory_limit环境变量、全局config或项目config设为-1解除限制,值必须为纯数字或-1。

Composer 运行报 Allowed memory size exhausted,不是 PHP 内存不够,而是 Composer 自己加了一层限制——默认只给 1.5G,哪怕你 php.ini 里设了 memory_limit = -1 也没用。
为什么 composer install 突然爆内存,但 php -v 显示内存无限?
Composer 在启动时会主动检查并覆盖 PHP 的 memory_limit,优先使用自己内置的硬编码阈值(1.5G),防止大项目卡死或拖垮服务器。这个行为不读 php.ini,也不受 ini_set() 影响,只认自己的配置项和环境变量。
- 常见错误现象:
PHP Fatal error: Allowed memory size of 1572864000 bytes exhausted(注意这个数字就是 1.5G) - 不是所有命令都触发:通常
composer update和带大量依赖解析的install更容易踩中 - 本地开发 vs CI 环境差异大:CI 容器常默认限制更严,容易在流水线里突然失败
三种生效方式,按优先级从高到低
Composer 会按顺序读取:环境变量 → 全局 config → 项目级 config。改错位置就白忙活。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
COMPOSER_MEMORY_LIMIT环境变量最高优先级,临时生效:COMPOSER_MEMORY_LIMIT=-1 composer install(-1表示不限制) - 全局设置(影响所有项目):
composer config -g memory-limit -1 - 仅当前项目生效(写入
composer.json的config段):"config": { "memory-limit": "-1" }
memory-limit 的值怎么写才有效?
它不接受单位缩写(比如 2G 或 2048M),只认纯数字或 -1,且必须是整数。
- 正确写法:
-1(不限)、2147483648(2G)、1073741824(1G) - 错误写法:
2G、2g、2048M、"-1"(带引号会被当字符串处理) - 兼容性注意:老版本 Composer(-1,只能填具体字节数;新版推荐直接用
-1
CI/CD 里最容易漏掉的点
很多团队在 GitHub Actions 或 GitLab CI 里加了 php -d memory_limit=-1,却忘了 Composer 有自己的开关,结果还是挂。
- Docker 环境下,
ENV COMPOSER_MEMORY_LIMIT=-1必须写在运行composer命令之前 - GitHub Actions 中,不能只靠
run: composer install,得显式带上环境变量:env: { COMPOSER_MEMORY_LIMIT: "-1" } - 如果用了
composer self-update,更新后记得重新确认配置是否还在——某些升级会重置全局 config
真正麻烦的不是设不设,而是不同环境之间配置没对齐:本地能过,CI 报错,上线又卡住。建议把 COMPOSER_MEMORY_LIMIT=-1 当成 CI 脚本的固定前缀,而不是“等出问题再加”。










