【问题标题】:Composer require runs out of memory. PHP Fatal error: Allowed memory size of 1610612736 bytes exhaustedComposer 要求内存不足。 PHP致命错误:允许的内存大小为1610612736字节已用尽
【发布时间】: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 到底怎么不够?作曲家真的需要这么多吗?

标签: php symfony composer-php


【解决方案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/flexhttps://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】:

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

            问题背景:

            1. 在 vagrant box 中运行 composer。
            2. 在尝试运行 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 了解有关如何处理内存不足错误的更多信息。

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

            解决方案:

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

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

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

            【讨论】:

              【解决方案20】:

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

              1. 要找到您的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

              1. 打开并搜索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
              
              1. 保存文件后,您可以通过运行此命令来验证 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
                                

                                【讨论】:

                                  猜你喜欢
                                  • 2021-03-15
                                  • 2020-12-17
                                  • 2019-05-21
                                  • 2021-01-21
                                  • 2017-11-06
                                  • 2015-07-06
                                  • 2018-05-19
                                  相关资源
                                  最近更新 更多