Composer 要求内存不足。 PHP致命错误:允许的内存大小为1610612736字节已用尽

Posted

技术标签:

【中文标题】Composer 要求内存不足。 PHP致命错误:允许的内存大小为1610612736字节已用尽【英文标题】:Composer require runs out of memory. PHP Fatal error: Allowed memory size of 1610612736 bytes exhausted 【发布时间】:2021-11-08 02:46:33 【问题描述】:

我正在尝试通过运行以下命令将 HWIOAuthBundle 添加到我的项目中。

composer require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle

HWIOAuthBundle github:https://github.com/hwi/HWIOAuthBundle

当我尝试运行 composer require 时,出现内存不足错误。

为 hwi/oauth-bundle 使用版本 ^0.6.0@dev 使用版本 ^1.2@dev 对于 php-http/guzzle6-adapter 使用版本 ^1.10@dev php-http/httplug-bundle ./composer.json 已更新 包含包信息的作曲家存储库更新依赖项 (包括require-dev)

PHP 致命错误:允许的内存大小为 1610612736 字节已用尽 (试图分配 67108864 字节)在 phar:///usr/local/Cellar/composer/1.4.2/libexec/composer.phar/src/Composer/DependencyResolver/Solver.php 在第 220 行

致命错误:允许的内存大小为 1610612736 字节已用尽(已尝试 分配 67108864 字节)在 phar:///usr/local/Cellar/composer/1.4.2/libexec/composer.phar/src/Composer/DependencyResolver/Solver.php 在第 220 行

我尝试在我的 php.ini 文件中将 memory_limit 设置为 2G,但没有成功。我通过运行 php -i | grep php.ini

找到了我的 php.ini

【问题讨论】:

你最近做了作曲家自我更新吗?不确定您的错误消息中的 1.4.2 是否表示版本 1.4.2 但作曲家的最新版本是 1.6.2。你有多少物理内存?是虚拟机还是云服务器? @Cerad 是的 - 我之前做过作曲家自我更新,我的作曲家版本是 1.6.2 @Cerad 这是在我的本地机器上,我绝对应该有足够的内存 在 Composer 之前运行良好的项目中遇到此问题时,我建议运行 composer self-update --rollback。我在使用 v.1.9.3 时开始遇到内存耗尽,当我回滚到 1.8.6 时停止。 难道没有人认​​为运行composer require可以使用超过1.5G的内存很疯狂吗?当我第一次看到这个时,我认为这一定是作曲家的一个错误。将内存限制设置为 -1 确实对我有用……但是 1.5G 到底怎么不够?作曲家真的需要这么多吗? 【参考方案1】:

要获取当前的 memory_limit 值,运行:

php -r "echo ini_get('memory_limit').PHP_EOL;"

尝试增加 php.ini 文件中的限制(例如,/etc/php5/cli/php.ini 用于类似 Debian 的系统):

; Use -1 for unlimited or define an explicit value like 2G
memory_limit = -1

或者,您可以使用命令行参数增加限制:

php -d memory_limit=-1 composer.phar require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle

要获取加载的 php.ini 文件位置尝试:

php --ini

另一个快速解决方案:

php composer.phar COMPOSER_MEMORY_LIMIT=-1 require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle

或者只是:

COMPOSER_MEMORY_LIMIT=-1 composer require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle

【讨论】:

COMPOSER_MEMORY_LIMIT=-1 作曲家更新也适用于我。 感谢php --ini 的命令!在 php 7.4 中,您有一个不同的 php ini 文件 (php-cli.ini) 用于 clid 使用 php -d memory_limit=-1 composer.phar install 为我工作。谢谢! memory_limit= -1 是一个好的解决方案吗?似乎它消除了任何内存消耗限制并且可以用完所有内存。 在 Windows 上,使用 SET COMPOSER_MEMORY_LIMIT=-1【参考方案2】:

就我而言,当我收到此错误时,我试图要求 this package。

可以这样运行,不用更新PHP INI文件:

COMPOSER_MEMORY_LIMIT=-1 composer require huddledigital/zendesk-laravel

【讨论】:

也有帮助。我的 PHP 限制是 128MB,但错误消息说 PHP 作曲家限制是 1.5GB(这意味着它是针对这种特殊情况在其他地方配置的)。所以修改 php.ini 没有帮助,但是这个答案有。 2021,这个解决方案仍然有效。谢谢! 谢谢,将常量 COMPOSER_MEMORY_LIMIT=-1 放在 composer require xyz 之前使其工作(接受的答案没有)。 你拯救了我的一天,就我而言,我正在安装 COMPOSER_MEMORY_LIMIT=-1 composer require guzzlehttp/guzzle【参考方案3】:

manual的另一个解决方案:

Composer 还遵守由 COMPOSER_MEMORY_LIMIT 环境变量定义的内存限制:

COMPOSER_MEMORY_LIMIT=-1 composer.phar <...>

或者在我的情况下

export COMPOSER_MEMORY_LIMIT=-1
composer <...>

【讨论】:

在 Mac 上我编辑了 ~/.bash_profile 以添加 alias composer="COMPOSER_MEMORY_LIMIT=-1 composer" 并为我解决了这个问题。请务必在更改后获取文件或重新启动终端 完美解决方案(无需更改任何php配置)【参考方案4】:

同样的问题,与“memory_limit”相关的任何东西都不起作用,但是..

composer self-update --2

..解决了我的问题。 (升级:1.1​​0.17 -> 2.0.4)

【讨论】:

对于那些composer self-update --2 - 没有工作并且发生了错误。 composer self-update --stable 完成了这项工作:) 其他解决方案不起作用,希望你写了你的......你让我过得很开心,谢谢 谢谢!,你救了我的工作。 composer self-update --stable 简单快捷的方法,thanx! composer self-update --stable 然后composer update 工作。【参考方案5】:

在 Windows 10 上;

转到C:\ProgramData\ComposerSetup\bin

编辑:composer.bat 并在最后一行添加memory_limit=-1,如下所示。

@echo OFF
:: in case DelayedExpansion is on and a path contains ! 
setlocal DISABLEDELAYEDEXPANSION
php -d memory_limit=-1 "%~dp0composer.phar" %*

问题解决了;)

【讨论】:

对我来说最好的,几乎所有的都不适合我。 我还必须更新没有 .bat 扩展名的 composer 文件(添加相同的 -d memory_limit=-1)到最后一行。 在 Windows 中,composer.bat 的位置不必总是C:\ProgramData\ComposerSetup\bin,但我猜这是默认位置。但是,如果有人想找到composer.bat 的位置,只需运行where 命令:如where composer。这将显示确切的位置。【参考方案6】:

由于之前的答案都没有包含set,所以我花了一些时间才弄清楚如何在不更改 php.ini 的情况下在 Windows 中执行此操作,但这对我有用:

set COMPOSER_MEMORY_LIMIT=-1
composer require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle

【讨论】:

这是 Windows 环境的最佳答案。谢谢:)【参考方案7】:

我已经绕过了 Homestead Laravel (vagrant) 虚拟机中的问题,该虚拟机运行前面带有 COMPOSER_MEMORY_LIMIT=-1 的作曲家命令:

例子

要更新 Composer:

COMPOSER_MEMORY_LIMIT=-1 composer update

要安装一个包:

COMPOSER_MEMORY_LIMIT=-1 composer require spatie/laravel-translatable

【讨论】:

谢谢老兄!它是全局更新还是仅针对该特定命令? 只是该特定命令的临时解决方案。 谢谢朋友!这是win10的最佳解决方案 我正在使用 laravel 8,我必须在命令之前添加 env 到类似这样的 env COMPOSER_MEMORY_LIMIT=-1 composer update【参考方案8】:

对于 macOS Catalina 和 macOS Big Sur 中的此错误,请使用以下行:

php -d memory_limit=-1 /usr/local/bin/composer update --no-plugins

我使用这一行来更新 Symfony 5。这个命令也适用于 laravel 7。

【讨论】:

它对我有用! php -d memory_limit=-1 composer.phar 需要 laravel-frontend-presets/tailwindcss --dev 如何永久修复此问题?每次创建新项目时我都需要重做。有什么建议吗?【参考方案9】:

只需设置 memory_limit 指定 composer.phar 文件的完整路径并更新,在我的情况下使用命令:

php -d memory_limit=-1 C:/wamp64/composer.phar update

【讨论】:

COMPOSER_MEMORY_LIMIT=-1 composer.phar update 也有效。见:getcomposer.org/doc/articles/… 在 ubuntu 上使用这个php -d memory_limit=-1 /usr/bin/composer update COMPOSER_MEMORY_LIMIT=-1 作曲家也为我工作.. @mayid 谢谢。 :+1【参考方案10】:

有时问题出在作曲家内存限制中。就我而言,我尝试增加 php 内存限制,但仍然出现错误。 你可以使用COMPOSER_MEMORY_LIMIT=-1 来解决这个问题。 使用它作为前缀:

COMPOSER_MEMORY_LIMIT=-1 composer require the/library

您以后必须再次添加前缀。

希望这会有所帮助。

【讨论】:

如果您使用的是 Windows CLI,那么这就是您的正确答案。【参考方案11】:

最近发现 Composer 在具有大量历史标签的包上消耗大量 CPU + 内存。见composer/composer#7577

解决此问题的方法是使用symfony/flex 或https://github.com/rubenrua/symfony-clean-tags-composer-plugin

composer global require rubenrua/symfony-clean-tags-composer-plugin

【讨论】:

只需要全局安装插件?还有什么可做的吗?你能解释一下这个插件实际上是做什么的吗?在这种情况下是否会减少作曲家的内存使用量?【参考方案12】:

以防万一您遇到作曲家错误:

无法打开输入文件:composer

运行:

php -d memory_limit=-1 /usr/local/bin/composer require ...

【讨论】:

【参考方案13】:

对于跳过内存限制和版本错误,请使用以下代码:

COMPOSER_MEMORY_LIMIT=-1 composer require <package-name> --ignore-platform-reqs

【讨论】:

【参考方案14】:

窗户呢?

我使用的是 Windows 10,这个命令对我有用,

php -d memory_limit=-1 "C:\ProgramData\ComposerSetup\bin\composer.phar" update

【讨论】:

【参考方案15】:

Composer 2.0 预览版现已推出:https://github.com/composer/composer/releases 为我解决了问题。您可以使用composer self-update --preview 设置预览

编辑:发布内存调整的 Composer 2

【讨论】:

【参考方案16】:

您可以在运行Composer时使用特定的php版本

如果像我一样,出于某种原因,即使您的计算机是 64 位,您也使用 PHP 32 位,这将始终限制分配给 Composer 的内存量。我这样解决了我的问题:

在您的计算机某处安装一个 64 位 php 版本(比如说在 C:/php64 中) 在作曲家(在我的例子中使用 cygwin)中,运行:

COMPOSER_MEMORY_LIMIT=-1 C:/php64/php.exe ../composer.phar update

【讨论】:

这个建议对我有用!谢谢。需要注意的是,您还需要更新系统环境变量以全局使用新的 64 位版本。【参考方案17】:

xampp 在 windows 中我刚刚更改:

;memory_limit=512M 

在 php.ini 中:

memory_limit =-1

然后通过 xampp 重启 Apache

这是结果:

; Maximum amount of memory a script may consume
; http://php.net/memory-limit
memory_limit =-1
;memory_limit=512M

【讨论】:

这个工作的人谢谢你,2021Jan15【参考方案18】:

在 Mac php 7.4 上

运行

php --ini

Configuration File (php.ini) Path: /usr/local/etc/php/7.4
Loaded Configuration File:         /usr/local/etc/php/7.4/php.ini
Scan for additional .ini files in: /usr/local/etc/php/7.4/conf.d
Additional .ini files parsed:      /usr/local/etc/php/7.4/conf.d/ext-opcache.ini,
/usr/local/etc/php/7.4/conf.d/php-memory-limits.ini

如果解析了其他 .ini 文件: memory_limit 需要更改

/usr/local/etc/php/7.4/conf.d/php-memory-limits.ini

正如 Jose Seie 所写,将内存设置为

memory_limit = -1 or memory_limit = 1G

【讨论】:

【参考方案19】:

只是想分享一下我在这件事上的情况。

问题背景:

    在 vagrant box 中运行 composer。 在尝试运行 composer require "laravel-doctrine/orm:~1.4.13" 后收到此消息:

致命错误:第 52 行 phar:///usr/local/bin/composer/src/Composer/DependencyResolver/RuleWatchGraph.php 中允许的内存大小为 1610612736 字节已用尽(尝试分配 4096 字节) 查看https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors 了解有关如何处理内存不足错误的更多信息。

    已尝试将 php.ini 内存限制设置为 -1。 (仍然无法正常工作)。

解决方案:

    显然我的 composer.json 和 composer.lock 有一些问题。 跑$ composer validate,结果是: "锁文件没有更新composer.json的最新变化,建议你运行composer update。"

    所以我运行了 $ composer update,所有的依赖都解决了。恕我直言,当依赖关系出现问题时,可能是树构建不同步,因此内存不足。

希望这对任何人都有帮助。

【讨论】:

【参考方案20】:

要覆盖此问题并解决本地计算机上的问题,您可以在 php.ini 配置文件中进行以下更改。

    要找到您的php.ini 配置文件,您可以使用以下命令:php --ini

运行此命令后,您应该会看到如下输出:

Configuration File (php.ini) Path: /usr/local/etc/php/7.3
Loaded Configuration File:         /usr/local/etc/php/7.3/php.ini <---- note the path
Scan for additional .ini files in: /usr/local/etc/php/7.3/conf.d
Additional .ini files parsed:      /usr/local/etc/php/7.3/conf.d/ext-opcache.ini

我们要更改的文件是Loaded Configuration

    打开并搜索memory_limit,您可以设置memory_limit = -1 为PHP 进程提供无限量的内存,或者您可以设置512MB, 1G, 2G, 5G,....

    $ nano /usr/local/etc/php/7.3/php.ini

定位并设置:

$ memory_limit = -1 or memory_limit = 1G

    保存文件后,您可以通过运行此命令来验证 PHP 更改,该命令将在您的 php.ini 文件中输出当前内存设置:

    php -r "echo ini_get('memory_limit').PHP_EOL;"

注意: 保存后,新的内存就可以工作了。你不需要做任何其他事情。

更多信息:https://support.acquia.com/hc/en-us/articles/360036102614-Overriding-memory-limits-during-local-development-with-Composer

【讨论】:

【参考方案21】:

Centos 7 使用:

COMPOSER_MEMORY_LIMIT=-1 composer require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle

【讨论】:

【参考方案22】:
Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/local/bin/composer/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52 Check https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors for more info on how to handle out of memory errors.

memory_limit 设置为 -1 对我有用 ;) (vim /etc/php/7.2/cli/php.ini)

【讨论】:

【参考方案23】:

对于 Macbook: 运行命令sudo nano ~/.bash_profile 编辑bash_profile 然后在该文件中添加alias composer="COMPOSER_MEMORY_LIMIT=-1 composer",然后保存并退出。

希望这能解决问题;编码愉快!

【讨论】:

【参考方案24】:

我将此处有用且被接受的答案压缩或打包成可重用 (zsh) 别名/函数,以便更快、更容易记住重用:

# composer high-memory
composermem() 
  php -r "echo ini_get('memory_limit').PHP_EOL;"

alias composerbig='COMPOSER_MEMORY_LIMIT=-1 composer $1'

php composer.phar 在系统上已别名为composer)。

【讨论】:

【参考方案25】:

我使用这个命令 COMPOSER_MEMORY_LIMIT=-1 解决了这个问题

示例:COMPOSER_MEMORY_LIMIT=-1 composer 需要 larval/ui

【讨论】:

【参考方案26】:

在确保供应商文件夹存在之前,请确保不需要包。

检查你之前是否做过composer install。您可能只是将存储库克隆到您的机器上。因此,您必须在需要新软件包之前安装旧软件包。或者您可能希望将此选项 --profile 包含在您的 composer 命令中,以查看时间和内存使用信息。

【讨论】:

【参考方案27】:

就我而言:

Windows 10 和 Docker Desktop 工作:

docker-compose -f .docker/docker-compose.yml exec php env COMPOSER_MEMORY_LIMIT=-1 composer require fideloper/proxy

【讨论】:

【参考方案28】:

您只需要增加“php.ini”文件的内存限制即可解决问题

在 php.ini 文件中找到“memory_limit”。

只需将 memory_limit 值更改为 2G,如下所示

;http://php.net/memory-limit
memory_limit=2G

使用以下命令重新定位 php 文件。

php --ini

【讨论】:

这看起来像是其他答案的副本。你有什么要补充的吗? 我想,发布我的问题的解决方案可能对某人有所帮助。而不是我找不到任何替代的新解决方案。【参考方案29】:

就我而言,我缺少交换分区。更多信息:https://github.com/composer/composer/issues/7348#issuecomment-414178276

【讨论】:

【参考方案30】:

实际上,如果将内存限制设置为 -1(无限制),它应该可以工作。 例如:

php -d memory_limit=-1 /usr/local/bin/composer update
/usr/bin/php7.1 -d memory_limit=-1 /usr/local/bin/composer update

【讨论】:

以上是关于Composer 要求内存不足。 PHP致命错误:允许的内存大小为1610612736字节已用尽的主要内容,如果未能解决你的问题,请参考以下文章

Php致命错误:使用composer安装用户捆绑时内存大小耗尽

构建树时PHP致命错误内存不足

PHP致命错误:内存不足(分配80740352)(试图分配12352字节)

WordPress PHP致命错误:内存不足(分配2097152)(试图分配4096字节)

Composer 内存不足 - 需要其他方法来增加 PHP memory_limit

Composer 致命错误:声明 Fxp... 必须与第 334 行的 ...AbstractAssetsRepository.php 兼容