直接用 COMPOSER_MEMORY_LIMIT=-1 composer install 临时解除内存限制,或设为 2G;需确认并修改 CLI 模式下的 php.ini(非 Web 服务器配置),因 Composer 默认使用 CLI PHP。

composer install 报 Allowed memory size exhausted 怎么办
这是 Composer 在解析依赖或下载包时 PHP 内存耗尽的典型错误,Allowed memory size of XXX bytes exhausted。根本原因不是 Composer 本身吃内存,而是它触发了 PHP 的 memory_limit 限制——尤其在 Laravel、Symfony 等大项目中很常见。
最直接有效的解法是临时提高内存上限,而不是改 php.ini 全局配置(容易影响其他服务):
- 运行前加
php -d memory_limit=-1:强制不限制,适合本地开发调试php -d memory_limit=-1 composer install - 用
COMPOSER_MEMORY_LIMIT环境变量(Composer 原生支持):COMPOSER_MEMORY_LIMIT=-1 composer install - 如果必须设具体值,推荐
2G起步(不是2048M,Composer 对单位敏感):COMPOSER_MEMORY_LIMIT=2G composer update
注意:-1 表示无限制,但实际仍受系统物理内存和 PHP 进程限制;生产环境不建议长期用 -1,应定位是否依赖树过深或存在循环 require。
为什么改 php.ini 里的 memory_limit 不一定生效
因为 Composer 默认调用的是 CLI 模式的 PHP,而 CLI 和 Web(如 Apache/Nginx 的 php-fpm)通常使用不同的 php.ini 文件。你改了 /etc/php/8.2/apache2/php.ini,对终端里跑的 composer 完全没用。
立即学习“PHP免费学习笔记(深入)”;
确认 Composer 当前用的是哪个配置:
- 查 CLI 的配置路径:
php -i | grep "Loaded Configuration File" - 看实际生效的 memory_limit:
php -r "echo ini_get('memory_limit');" - 常见 CLI 配置路径(Ubuntu/Debian):
/etc/php/8.2/cli/php.ini;macOS Homebrew:/usr/local/etc/php/8.2/php.ini
改完记得重启终端或重新加载 shell 配置(source ~/.zshrc),否则新配置不会被当前 shell 继承。
composer update 卡住或慢得离谱,是不是也跟内存有关
不一定。内存不足会直接报错退出,而“卡住”更可能是网络、镜像源或依赖解析逻辑问题。但高内存限制确实能减少因 OOM 导致的中途失败重试,间接提升成功率。
优先排查这些点:
- 换国内镜像源(阿里云、腾讯云):
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 禁用插件减少开销(某些插件会反复扫描 vendor):
composer update --no-plugins - 跳过平台检查(尤其 PHP 版本不完全匹配时):
composer update --ignore-platform-reqs,但别在生产环境用 - 如果只更新某几个包,别全量
update:composer update monolog/monolog guzzlehttp/guzzle
注意:--ignore-platform-reqs 可能导致装上不兼容的扩展版本,后续运行时报 Class not found 或 undefined function,得自己兜底。
PHP 8.2+ 用 composer require 报错 memory_limit=128M 是怎么回事
这是 Composer 2.5+ 的默认行为:即使你没设 memory_limit,它也会主动检测并拒绝在低于 1.5G 的环境下执行某些操作(比如 require 新包时重新计算依赖图)。它读的是 CLI 的 memory_limit,不是你 Web 服务的值。
验证方式:
-
php -r "var_dump(ini_get('memory_limit'));"输出128M就是它了 - Composer 会输出明确提示:
Your system has low memory available, please increase it to at least 1.5G
解决办法只有两个方向:
- 临时绕过(推荐):
COMPOSER_MEMORY_LIMIT=2G composer require foo/bar - 永久修复(仅限开发机):编辑 CLI 的
php.ini,把memory_limit = 128M改成memory_limit = 2G,然后保存
别信“改 php.ini 里 max_execution_time 或 post_max_size 能解决”,那些和 Composer 内存无关,纯属混淆项。











