当前位置: 首页 > 知识库问答 >
问题:

Composer更新失败--内存溢出

丁绪
2023-03-14

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

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

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个月。我使用的是PHP5.6.11。有人能帮忙吗?

共有3个答案

苏健柏
2023-03-14

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

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

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

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

符修杰
2023-03-14

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

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

参考:组合故障排除

齐英朗
2023-03-14

查看Composer的故障排除wiki,特别是内存限制错误部分。

例如,通过如下方式运行composer:

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

我不再犯错误了。因此,这可能是一个内存不足的问题,可以通过内联方式解决,而无需更改默认的PHP配置。

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

请注意,您可能应该使用composer.pharPHP脚本的真实路径,而不是“which composer”。哪个composer内联编写(如上面的示例中所示)将内联求解为composer.phar完整路径(您可以使用任何形式)。

注意:如果超过物理和虚拟内存,上述解决方案也可能失败。如果是这样的话,那么显而易见的解决方案是增加系统的虚拟内存,然后再试一次。

 类似资料:
  • 我在我的项目中运行了composer update,因为我更改了计算机,所以我克隆了该项目。它返回了以下错误,但我不知道如何解决它们…: 问题1-系统中缺少请求的PHP扩展ext mcrypt*。安装或启用PHP的mcrypt扩展。 问题2-guzzle/guzzle v3.9.3的安装请求- 问题3-phpoffice/phpexcel 1.8.1的安装请求- 问题4-sentry/sentry

  • 我从git克隆了我的项目。yii2中缺少供应商文件夹,当我更新作曲家时,它显示 潜在原因: 如何解决这个问题?

  • JNIEXPORT jint JNICALL Java_nc_mes_pub_hardware_PCI1761_readChanel(JNIEnv*,jobject,jint channel){ }

  • 我想格式化和写入一个大的(1.785.530条目)的内容到一个文本文件。大约85%的条目被处理后,它变得非常慢,然后我得到一个。 即使我: 在我的

  • 问题内容: 有人可以帮我在Docker容器中轻松工作吗?每当我尝试在Docker容器中运行任何apt-get命令时,该命令都会失败。我正在运行Docker 1.1.1版,在Ubuntu 12.04上构建bd609d2。 当我做 我说错了 无法解析“ archive.ubuntu.com” 我试图取消注释/ etc / default / docker下面的行 DOCKER_OPTS =“-dns