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


257

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

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

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

当我尝试运行composer时,我遇到了内存不足错误。

将版本^0.6.0@dev用于hwi / oauth-bundle将版本^1.2@dev用于php-http / guzzle6-adapter将版本^1.10@dev用于php-http / httplug-bundle ./composer.json已更新使用包信息加载composer存储库更新依赖关系(包括require-dev)

PHP致命错误:在phar:///usr/local/Cellar/composer/1.4.2/libexec/composer.phar/src/Composer/DependencyResolver/Solver中耗尽了允许的内存大小1610612736字节(尝试分配67108864字节)。 PHP的220行

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

我试图在我的php.ini文件中将memory_limit设置为2G,但是没有用。我通过运行找到了php.iniphp -i | grep php.ini


3
您最近做过作曲家的自我更新吗?不知道错误消息中的1.4.2是否指示版本1.4.2,但是composer的最新版本是1.6.2。您有多少物理内存?它是VM还是云服务器?
塞拉德(Cerad)'18

@Cerad是的-我之前做过作曲家的自我更新,我的作曲家的版本是1.6.2
Brian Chen

@Cerad,这是在我的本地计算机上,我绝对应该有足够的内存
Brian Chen,

在Composer之前运行良好的项目中遇到此问题时,建议运行composer self-update --rollback。我从v.1.9.3开始遇到内存耗尽的问题,当我回滚到1.8.6时该内存停止了。
karolus

没有人会认为跑步composer require可以使用超过1.5G的内存是非常疯狂的吗?当我第一次看到这个时,我认为这一定是作曲家中的一个错误。将内存限制设置为-1对我有用...但是1.5G到底还不够吗?作曲家真的需要那么多吗?
丹尼尔·霍华德

Answers:


383

要获取当前的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

33
COMPOSER_MEMORY_LIMIT = -1作曲家更新对我也适用。
Kishan Patel

1
感谢您的命令php --ini!在php 7.4中,您有一个其他的php ini文件(php-cli.ini)
Vincent Decaux

4
使用php -d memory_limit=-1 composer.phar install对我有用。谢谢!
Tomasz Kuter

1
memory_limit = -1是一个好的解决方案吗?似乎它消除了任何内存消耗限制,并且可以用光所有这些限制。
kamote ulalo

2
在Windows上,使用SET COMPOSER_MEMORY_LIMIT=-1
Vincent Decaux

298

就我而言,我正试图需要此软件包,而我却得到了PHP Fatal error: Allowed memory size of

我发现这样运行很容易,您不必更新PHP INI文件。

例: COMPOSER_MEMORY_LIMIT=-1 composer require huddledigital/zendesk-laravel

希望这可以帮助某人。


也有所帮助。我的PHP限制为128MB,但错误消息显示PHP作曲家的限制为1,5GB(这意味着针对此特定情况已在其他位置对其进行了配置)。因此修改php.ini并没有帮助,但是这个答案确实有用。
汤姆(Tom),

84

手册中的另一种解决方案:

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

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

或者就我而言

export COMPOSER_MEMORY_LIMIT=-1
composer <...>

13
在Mac上,我编辑~/.bash_profile了添加内容alias composer="COMPOSER_MEMORY_LIMIT=-1 composer",这对我来说解决了。确保更改后获取文件源或重新启动终端
nicholas.alipaz

46

在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" %*

问题解决了 ;)


4
对我来说最好的,几乎所有的人都不适合我。
krachleur

1
我还必须更新没有.bat扩展名的composer文件(将相同的-d memory_limit = -1添加到最后一行)。
Maulik Gangani

在Windows中,位置composer.bat不一定C:\ProgramData\ComposerSetup\bin总是,但我想这是默认位置。但是,如果有人要查找位置,composer.bat只需运行以下where命令:like where composer。那将显示确切的位置。
rineez

30

由于以前的答案都没有,set因此花了我一些时间来弄清楚如何在Windows中完成此操作而不更改php.ini,但这对我有用:

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

1
这是Windows环境的最佳答案。谢谢:)
sykez

26

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

composer self-update --2

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


3
对于那些composer self-update --2-没有用,并且发生了错误。 composer self-update --stable做的工作:)
WebMan

23

只需设置memory_limit指定composer.phar文件的完整路径并进行更新,就我而言,使用以下命令:

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

6
COMPOSER_MEMORY_LIMIT=-1 composer.phar update可以。参见:getcomposer.org/doc/articles/…–
mayid

5
在ubuntu上使用它php -d memory_limit=-1 /usr/bin/composer update
偷偷摸摸的

COMPOSER_MEMORY_LIMIT = -1作曲家也为我工作。.@mayid谢谢。:+1
Kishan Patel

20

最近发现,Composer在具有很多历史标记的程序包上消耗大量CPU +内存。参见composer / composer#7577

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

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

1
只需要在全球范围内安装插件?没什么可做的了吗?您能否解释一下该插件的实际作用?在这种情况下是否会减少作曲家的内存使用量?
rineez

17

万一您遇到作曲家错误,请执行以下操作:

无法打开输入文件:作曲家

跑:

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

15

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

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

15

我绕过Homestead Laravel(无用)虚拟机中的问题,该虚拟机运行带有以下命令的composer命令COMPOSER_MEMORY_LIMIT=-1

例子

要更新Composer:

COMPOSER_MEMORY_LIMIT=-1 composer update

要安装软件包:

COMPOSER_MEMORY_LIMIT=-1 composer require spatie/laravel-translatable

多谢,伙计!它是全局更新的还是仅针对该特定命令?
andcl

1
只是该特定命令的临时解决方案。
戴维·卡西拉吉

15

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

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

我使用此行在Symfony 5上进行更新。此命令还与laravel 7一起使用。


11

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

COMPOSER_MEMORY_LIMIT=-1 composer require the/library

您将来必须再次给它加上前缀。

希望这可以帮助。




5

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

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

  • 在您的计算机上的某处安装64位php版本(例如在C:/ php64中)
  • 在作曲家中(在我的情况下使用cygwin),运行:

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


这个建议对我有用!谢谢。注意,您还需要更新系统环境变量以全局使用新的64位版本。
GentleGiant

3

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

问题背景:

  1. 在一个无所事事的盒子中运行作曲家。
  2. 尝试运行作曲家后要求“ 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有一些问题。Ran $ composer验证,结果是:“锁文件不是composer.json的最新更改所最新,建议您运行composer update。”

  2. 所以我运行了$ composer update,所有的依赖关系都解决了。恕我直言,当依赖项存在一些问题时,树的构建可能会不同步,从而导致内存不足的问题。

希望这可以帮助任何人。


3

要覆盖此问题并解决本地计算机上的问题,您可以在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

我们要更改的文件是“加载的配置”

  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/zh-cn/articles/360036102614-Overriding-memory-limits-during-local-development-with-Composer


3

在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

3

在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

2
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)


2

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

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


1

我将此处有用且可接受的答案压缩或打包为可重用(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)。



0

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

检查您composer install之前是否做过。您可能只是将存储库克隆到您的计算机。因此,您必须先安装旧软件包,然后再安装新软件包。或者,您可能希望将此选项包括--profile在composer命令中以查看时间和内存使用情况信息。


-1

如果使用Wampserver,这是解决Windows下此问题的另一种方法。实际上,在wampserver级别上,有两个php.ini文件(即PHP),可以在以下位置找到C:\ wamp64 \ bin \ php \ phpx.xx \ php.ini和Apache的位置。在位置C找到:\ wamp64 \ bin \ apache \ apachex.xx \ bin \ php.ini。这两个文件都具有memory_limit参数。因此,为确保解决此问题,最好同时在两个文件中设置memory_limit = -1参数。


1
memory_limit为网络服务器设置不会对运行Composer产生任何影响。此外,memory_limit = -1全局使用应该是最后一个选择,因为这会使所有正在运行的PHP进程陷入内存耗尽状态。更好的设置只有当你需要它,直接连接到起动过程中
尼科·哈泽

-1

我正在使用php7.2,并且大小memory_limit = 512M默认设置为。要增加大小,您需要找到php.ini

在中Wamp,它位于中C:\wamp64\bin\php\php7.2.23\php.ini。请注意PHP版本,因为它是名称文件夹,对于我来说,php7.2.23

在中Laragon,它的位置C:\laragon\bin\php\php-7.2.23-Win32-VC15-x64\php.ini与我的情况相同。

如果您不希望有无限的空间,可以设置任何方便的尺寸,在我看来, memory_limit = 2G

如果要允许无限的空间,可以更改为 memory_limit = -1



-2

如果在xampp的情况下,去PHP目录中查找php.ini,它将在xampp / PHP和php.ini文件中,将memory_limit:512M更新为2048M


请在回答中添加更多解释-OP表示他已经将其设置memory_limit为2G
Nico Haase
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.