
应使用 php -d memory_limit=2G 或 COMPOSER_MEMORY_LIMIT=2G 限制内存,前者优先级更高且控制所有子进程;composer config memory-limit 无效,因该命令不存在。
Allowed memory size exhausted 怎么办Composer 默认不限制内存,遇到大项目(如 Laravel + 大量插件)容易因 PHP 内存溢出中断。这不是 Composer 本身的问题,而是它调用的 PHP 进程超限——所以得从 PHP 层面控制,不是 Composer 自带某个 memory_limit 配置项。
实际生效顺序:命令行参数 > php.ini 临时设置 > 系统级 php.ini。推荐用前两种,避免污染全局配置。
-d memory_limit=2G(最常用、最安全):php -d memory_limit=2G /usr/local/bin/composer install
COMPOSER_MEMORY_LIMIT 环境变量(Composer 原生支持):COMPOSER_MEMORY_LIMIT=2G composer install
-1 表示不限制,0 表示使用 php.ini 当前值php.ini 的 memory
_limit(不推荐用于共享环境):/etc/php/*/cli/php.ini 或 php --ini 查看),改 memory_limit = 2G
COMPOSER_MEMORY_LIMIT 和 php -d 的关键区别
两者都能起作用,但行为不同:
COMPOSER_MEMORY_LIMIT 只影响 Composer 主进程,不控制它 fork 出的子进程(比如某些插件执行脚本时仍可能爆内存)php -d memory_limit=... 是启动 PHP 解释器时硬性设定,所有后续执行(包括 require 的第三方脚本)都受约束,更彻底php -d 优先级更高,COMPOSER_MEMORY_LIMIT 会被忽略composer config memory-limit 不起作用这个命令根本不存在。Composer 的 config 命令不支持 memory-limit,网上很多教程写的 composer config -g memory-limit -1 是错的——执行后既不报错也不生效,纯属误导。真正有效的只有上面提到的环境变量或 PHP 启动参数。
复杂点在于:有些 CI 环境(如 GitHub Actions)默认内存紧张,且可能禁用 php -d 参数;这时候必须用 COMPOSER_MEMORY_LIMIT,并确认 runner 的 PHP CLI 版本和 ini 加载路径是否一致。