Composer Update失败 - 内存不足

时间:2015-10-23 09:42:47

标签: php out-of-memory composer-php

在我的VM上运行composer.phar update时出现此错误:

  

PHP致命错误:第179行的phar:///bin/composer.phar/src/Composer/Util/RemoteFilesystem.php中允许的内存大小为1073741824字节(尝试分配144115188075867549字节)

composer.json,如果需要:

{
        "description" : "The CodeIgniter framework",
        "name" : "codeigniter/framework",
        "license": "MIT",
        "require": {
                "php": ">=5.2.4",
                "videlalvaro/php-amqplib": "2.5.*"
        },
        "require-dev": {
                "mikey179/vfsStream": "1.1.*",
                "videlalvaro/php-amqplib": "2.5.*"
        }
}

虚拟机刚刚从一个糟糕的磁盘扇区问题中恢复,运行虚拟机的人说虚拟机已经移动到新磁盘。在我的虚拟机中只有Java,PHP,httpd,postgre,rabbitmq和网站本身,在此之前它已经运行了大约4个月。我正在使用PHP 5.6.11。有人可以帮忙吗?

28 个答案:

答案 0 :(得分:17)

检查Composer's troubleshooting wiki,尤其是内存限制错误部分。

例如,通过运行这样的作曲家:

php -d memory_limit=-1 `which composer` update

我不再有任何错误了。所以它可能是内存不足的内存问题,而不会改变你的默认PHP配置。

上面的命令是什么,它将PHP CLI内存限制设置为“无限制”(即-1),然后运行内联composer update命令。

请注意,您应该使用composer.phar PHP脚本的实际路径,而不是`which composer` which composer内联编写(如上例所示)将内联解决到composer.phar完整路径(您可以使用您喜欢的任何形式)。

答案 1 :(得分:11)

解决我的问题的唯一方法就是这样做:

/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
/sbin/mkswap /var/swap.1
/sbin/swapon /var/swap.1

REF:COMPOSER TROUBLESHOOTING

答案 2 :(得分:10)

我不是使用永久性地将您的内存限制设置为增加的数字(或无限的),而是使用此方法;

# Running an update
COMPOSER_MEMORY_LIMIT=-1 composer update
COMPOSER_MEMORY_LIMIT=-1 composer require PACKAGE/NAME

暂时将作曲家的内存限制env变量设置为无限制。

答案 3 :(得分:7)

解决方法是删除整个供应商文件夹,然后再次进行作曲家更新,它的工作原理......不知何故。我甚至不理解:v

答案 4 :(得分:4)

根据我的经验,composer的内存错误通常意味着它花费太多的内存来寻找要安装的软件包的正确组合,尤其是版本限制不够具体。例如,^ 5.2.4匹配5.3到5.3.29、5.4到5.4.45等。对于每个特定的版本和排列,作曲者必须获取程序包的依赖项以检查是否满足所有约束。通常这是在内存消耗变得巨大时。

确定了版本后,安装阶段将使用更少的内存。每个软件包的已解析版本也存储在composer.lock文件中,以便可以在其他环境中复制安装的特定排列。 这是可能解决您问题的方法:在您的开发机上运行composer更新(应该有足够的内存),部署更新的composer.lock,然后在服务器上运行composer install。

Composer安装将始终引用现有的composer.lock来为每个软件包安装要安装的版本,因此很少会遇到内存问题。

有关如何在composer.json中表达版本约束的参考,请查看https://getcomposer.org/doc/articles/versions.md

答案 5 :(得分:4)

在Windows上使用软件Laragon时,以下代码帮助我需要一个新的程序包而不会出现内存错误:

php -d memory_limit=-1 "C:\laragon\bin\composer\composer.phar" require <insert package author here>/<insert package name here>

答案 6 :(得分:3)

这是内存问题,而不是存储问题。 您已达到PHP内存限制。

编辑/etc/php.ini并增加内存限制(memory_limit = 128M替换为memory_limit = 256M)

我建议你找一下composer使用这么多内存的原因,并找到削减PHP内存使用量的方法:

  1. 如果您还没有
  2. ,请升级到PHP56
  3. 安装Zend Opcache(在不同实例之间共享PHP内存)
  4. 卸载所有未使用的PECL扩展程序
  5. 这是您遇到的问题:https://github.com/composer/composer/issues/1898

答案 7 :(得分:3)

既可以在本地环境中运行,也可以在容器中(例如,在管道的构建阶段)工作的解决方案是

COMPOSER_MEMORY_LIMIT=-1 composer install

答案 8 :(得分:3)

我在Windows计算机上,我尝试了此问题的所有答案,但没有一个起作用。对我来说,在我使用64位版本的PHP 运行作曲家后,它终于可以工作了。

要使用PHP x64的本地副本运行composer,可以执行以下操作:

  1. 从此处下载zip文件(我使用VC15 x64 Thread Safe版本):https://windows.php.net/download
  2. 解压缩文件
  3. 复制php.ini-development并重命名为php.ini
  4. 取消注释students = int(input('How many students: ')) total_sum = 0 for n in range(students): Letter = input('Enter grades: ') Letter_int = 0 # here you better initialize with integer not string if Letter == "A": # this condition needs to be indented - you want it to be executed # in every iteration of for loop Letter_int = 80 # the assignment in Python is done by "=" not "==" (that would be comparison) elif Letter == "B": Letter_int = 70 # you do not need to do int(70), 70 is already an integer elif Letter == "C": Letter_int = 60 elif Letter == "D": Letter_int = 50 elif Letter == "F": Letter_int = 40 total_sum += Letter_int # this cannot happen inside elif clause - this way it would only be # executed when F grade is provided avg = total_sum/students print('Average of this/these', students, 'student(s) is:', avg) 行和您将需要的任何其他php扩展名(例如extension_dir = "ext"extension=gd2)。如果更新需要其他任何PHP扩展,则它将在运行命令时告诉您。

工作命令:

extension=openssl

来源:https://ourcodeworld.com/articles/read/816/how-to-solve-composer-install-update-error-virtualalloc-failed-0x00000008

答案 9 :(得分:2)

Katiak的答案有效,但我必须对其进行修改。您需要2 GB的可用空间才能在Linux机器上工作。如果您不是root用户,请确保使用sudo命令:

/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=2048
/sbin/mkswap /var/swap.1
/sbin/swapon /var/swap.1

Composer为某些存储库(如Drupal)占用了大量内存。

本质上,从硬盘驱动器创建2 GB的交换内存,CPU可使用该交换内存来完成composer命令。

最初的解决方案似乎来自这个Github线程,但我可能会误会:

https://github.com/composer/composer/issues/7348#issuecomment-414178276

答案 10 :(得分:2)

尝试这个

COMPOSER_MEMORY_LIMIT=-1 composer require [package name]

答案 11 :(得分:1)

对我有用!

通过以下链接下载PHP的zip 64位版本: https://windows.php.net/download/

enter image description here

现在将其解压缩到C:\ PHP-74 \,并将 php.ini-development 重命名为 php.ini

php.ini

现在打开此php.ini,并删除; (分号)以取消注释以下内容。

extension_dir = "ext"
extension=bz2
extension=curl
extension=fileinfo
extension=gd2
extension=gettext
extension=mbstring
extension=exif      ; Must be after mbstring as it depends on it
extension=mysqli
extension=openssl
extension=pdo_sqlite

在我的情况下,需要这些扩展名,您可以比较xampp的旧php.ini文件或wamp解析此文件。现在保存文件并运行以下命令。

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

答案 12 :(得分:1)

将作曲家更新到 v2。

composer self-update --2

删除供应商路径和composer.lock文件。

php.ini memory_limit=-1 中设置。

运行

composer install

答案 13 :(得分:1)

php -d memory_limit=-1 /usr/local/bin/composer install

此命令对我有用。

答案 14 :(得分:1)

在我的情况下,由于在流浪汉中运行composer install,我遇到了此错误。在我的主机中运行它并没有引起问题。

答案 15 :(得分:1)

我在php.ini文件中设置了memory_limit = -1,但没有工作,但我继续从下面的链接执行命令,然后运行composer install并完美运行

https://tecadmin.net/enable-swap-on-ubuntu/

答案 16 :(得分:0)

这个帮助了我,显示了内存使用情况:

php -d memory_limit=-1 /usr/local/bin/composer update --verbose --profile

答案 17 :(得分:0)

如果在Windows上使用XAMP,建议将您的Composer版本更新为最新版本。 卸载并下载最新版本-https://getcomposer.org/download/并安装。

也可以尝试将PHP版本更新为最新版本。

答案 18 :(得分:0)

如果您遇到 composer 内存问题,现在最好的选择可能是使用 composer v2,如果可以的话。

Composer v2 有许多性能改进,因此占用的内存要少得多。

我总是不得不使用 COMPOSER_MEMORY_LIMIT=-1 composer update,但在 v2 更新之后,我不再需要使用它了。

查看发布公告 https://blog.packagist.com/composer-2-0-is-now-available/ 或下载最新版本 https://getcomposer.org/download/

答案 19 :(得分:0)

增加我的memory_limit的{​​{1}}值并不能解决我的问题。 我所做的是:

  1. 删除composer.lock,
  2. 运行作曲家更新

那就成功了!

答案 20 :(得分:0)

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

memory_limit=-1用于此过程的无限内存 当您在作曲家之前添加php以获得无限内存时,则必须提供作曲家完整路径,该路径用于将其安装在服务器上(对于ubntu)其/usr/local/bin/composer 复习部分只是compoer命令更新/安装

答案 21 :(得分:0)

此解决方案将解决您的问题。

更新您的php.ini文件,然后重新启动Apache或服务器 例: memory_limit = 128M 至 memory_limit = 1128M

对我有用。

答案 22 :(得分:0)

对我没有任何帮助。最后将memory_limit = -1放入php.ini文件中。

答案 23 :(得分:0)

尝试增加活动php.ini文件中的memory_limit值。

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

例如。

答案 24 :(得分:0)

您也可以通过删除供应商目录并重新执行composer install命令来解决问题。

答案 25 :(得分:0)

内存限制错误

Composer有时可能在某些命令中失败,并显示以下消息:

  

PHP致命错误:允许的XXXXXX字节内存大小用尽<...>

     
    

或者就我而言:

         

致命错误:内存不足(已分配1116733440)(尝试分配     phar:// C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/DependencyResolver/Pool.php中的134217728字节)     在第339行

  

在这种情况下,应该增加PHP memory_limit

  

注意:Composer在内部将 memory_limit 增加到    1.5G

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

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

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

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

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

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

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

php -d memory_limit=-1 composer.phar <...>

当激活了外壳前叉炸弹保护功能时,在cPanel实例上也可能发生此问题。有关更多信息,请参见cPanel网站上的{@ 3}叉子炸弹功能。


要加载php.ini文件的位置,请尝试:

php --ini

来源:(作曲家documentation

答案 26 :(得分:-1)

如果在更新内存限制后仍然遇到问题,那么最好的方法是运行:

composer update --lock

这将更新您的锁定文件,以便在您更改了composer.json文件后可以从其运行composer。

您现在可以最佳地运行:

composer update

composer install

答案 27 :(得分:-6)

sudo php -d memory_limit=-1 bin/magento setup:di:compile