Composer Update失败 - 内存不足

问题描述 投票:12回答:8

在我的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.*"
        }
}

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

php out-of-memory composer-php
8个回答
20
投票

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

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

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

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

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

请注意,您应该使用composer.phar PHP脚本的真实路径,而不是`哪个作曲家`。内联写的which composer(如上面的例子)将内联解决你的composer.phar完整路径(你可以使用你喜欢的任何形式)。


14
投票

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

/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


8
投票

通过删除整个供应商文件夹解决,然后再次进行作曲家更新,它工作......不知何故。我甚至不明白:v


7
投票

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

一旦找到版本,安装阶段使用的内存就会少得多。每个包的已解析版本也存储在composer.lock文件中,以便可以在其他环境中复制安装的特定排列。这是您的问题的潜在解决方案:在您的开发机器中运行composer update(应该有足够的内存),部署更新的composer.lock,并在服务器上运行composer install。

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

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


3
投票

这是一个内存问题,而不是存储问题。您正在达到PHP内存限制。

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

我建议你寻找作曲家使用如此多内存的原因,并找到削减PHP内存使用量的方法:

  1. 如果还没有,请升级到PHP56
  2. 安装Zend Opcache(在不同实例之间共享PHP内存)
  3. 卸载所有未使用的PECL扩展

这是你遇到的问题:https://github.com/composer/composer/issues/1898


1
投票

在我的情况下,我因为在流浪盒内运行composer install而面临这个错误。在我的主机内运行它不会导致问题。


0
投票

Memory limit errors

使用此消息,Composer有时可能会失败一些命令:

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

或者在我的情况下:

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

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

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

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

Composer还尊重COMPOSER_MEMORY_LIMIT环境变量定义的内存限制:

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

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

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

当激活shell fork炸弹保护时,cPanel实例上也会发生此问题。有关更多信息,请参阅cPanel站点上的fork炸弹功能的documentation


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

php --ini

资料来源:(作曲家docs


0
投票

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


-6
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.