【问题标题】:Composer running out of memory on every project, Mac OS X作曲家在每个项目上都内存不足,Mac OS X
【发布时间】:2014-03-15 22:55:46
【问题描述】:

我昨天尝试在我的一个 Laravel 4 项目中使用 Composer 安装 aws/aws-sdk-php,我不记得确切的事件链,但它没有成功安装。从那以后,我一直收到 Composer 内存不足的错误消息 - Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 32 bytes) in phar:///usr/local/bin/composer/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52

我将 php.ini memory_limit 增加到 -1,这仍然发生在我的开发和生产环境中(生产环境是 Cent OS 6)。如果我在运行composer_update 时通过CLI 增加memory_limit,则安装成功完成,但这需要很长时间。

是否需要清除某种缓存以防止 Composer 内存不足?我感觉每次运行 composer update 时它仍在尝试安装 AWS 开发工具包。

作曲家文件

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "require": {
        "laravel/framework": "4.0.*",
        "rtablada/package-installer": "dev-master",
        "mogreet/mogreet-php": "dev-master",
        "twilio/laratwilio": "dev-master",
        "balloon/elephant.io": "dev-master",
        "facebook/php-sdk": "dev-master",
        "way/generators": "dev-master",
        "codesleeve/asset-pipeline": "dev-master",
        "natxet/CssMin": "dev-master"
    },
    "autoload": {
        "classmap": [
            "app/commands",
            "app/controllers",
            "app/models",
            "app/database/migrations",
            "app/database/seeds",
            "app/tests/TestCase.php",
            "app/libraries"
        ]
    },
    "scripts": {
        "post-install-cmd": [
            "php artisan optimize"
        ],
        "pre-update-cmd": [
            "php artisan clear-compiled"
        ],
        "post-update-cmd": [
            "php artisan optimize"
        ],
        "post-create-project-cmd": [
            "php artisan key:generate"
        ]
    },
    "config": {
        "preferred-install": "dist"
    },
    "minimum-stability": "dev"
}

【问题讨论】:

  • 我想对此进行调查 - 您能否发布您尝试运行的作曲家文件,或者如果它当前使用私有内容,请发布修改版本。
  • 当然,等等……这发生在两个项目中,一个是我尝试在其上安装 AWS SDK,另一个是我没有。我将发布我尝试过的那个
  • stackoverflow.com/questions/21815635/… 遵循此以获得快速和快速的解决方案。

标签: php laravel-4 composer-php


【解决方案1】:

编辑:在继续之前,请始终确保您运行的是最新版本的作曲家,您可以通过composer self-update更新它

当您运行composer update 时,它将为您的每个库(或最新版本)计算最新的 gitref,然后安装该版本的库。然后它将这些版本存储在composer.lock 文件中。

当您运行composer install 时,它只会安装composer.lock 文件中定义的版本。

composer update 需要这么长时间并使用这么多内存的原因是因为它必须跟踪每个库的版本,将其与您在 composer.json 中定义的版本进行比较,然后检查该库的所有依赖项。这是一个相当密集的过程。

我发现使用hhvm 运行composer(你可以安装它here)大大加快了composer update 进程。

除此之外,您只需要忍受高内存使用并在您的php.ini 文件中增加它。确保更新与 CLI 相关的那个。

编辑:您永远不应该在生产环境中运行composer update。您应该只在开发时更新您的依赖项,然后在生产环境中使用composer install 安装您最后使用的一组作曲家依赖项。

【讨论】:

  • 当我将一个新包添加到我的 composer.json 文件时,最好运行 composer install 而不是 composer update 吗?另外,在尝试安装 AWS PHP SDK 之前我没有遇到任何问题,有什么方法可以撤消导致它启动的任何原因吗?我仍在努力掌握所有 Composer 业务的窍门。
  • 随着您添加更多依赖项,您的composer update 将花费更长的时间 - 它需要计算更多。我刚刚发现了一个可能与您的问题有关的讨论 thread here - 我强烈建议您安装 HHVM 并通过它运行 composer update
  • 好的,我去看看 HHVM。谢谢你的建议:)
  • 提交 composer.lock 文件对我来说已经足够了
【解决方案2】:

目前 Composer 上存在导致内存耗尽的错误。

如果你这样做了

composer install

然后删除vendor里面的一个文件夹

rm -rf vendor/laravel

然后做

composer update

你会得到这个错误。这是一个错误,它不应该耗尽内存。

现在你可以自己修复它:

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

另外,请检查this thread,他们即将解决此问题。

【讨论】:

  • 谢谢!是的,php -d memory_limit=-1 /usr/local/bin/composer update 是我目前唯一可以运行它的方法
  • 就我而言,我需要php -d memory_limit=-1 /usr/local/bin/composer.phar update 命令
【解决方案3】:

试试这个。它解决了我的问题。我想解决它的方法比更新内存更好。

sudo composer self-update

【讨论】:

  • 我得到:[InvalidArgumentException] 命令“自我更新”未定义。
【解决方案4】:

简单,输入以下命令:

rm -rf vendor/

rm -rf composer.lock

php composer install --prefer-dist

应该适用于内存不足的机器或其他内存问题

【讨论】:

  • 我认为通过更新 Composer 解决了问题。这已成为遥远的记忆
  • 好。命令“composer update”占用了太多内存,可能是因为做比较...
【解决方案5】:

我也遇到过这个问题,但我使用的是brew

composer --version
brew info composer
brew upgrade composer
...
==> Upgrading 1 outdated package:
composer 1.9.0 -> 1.9.2
==> Upgrading composer 
...

这仍然没有解决我的composer require drupal/environment_indicator

使用其他人提到的php内存限制最终解决了这个问题。

php -d memory_limit=-1 `which composer` require drupal/environment_indicator

【讨论】:

    【解决方案6】:

    之所以占用这么多内存是因为 Composer 在处理包和替换关键字时的行为。

    替换背后的想法是它允许你做两件事:

    • 用您自己的版本替换标准库版本。例如如果你在 'symfony/yaml' 中找到一个例子,你可以分叉它,修复错误,然后将它作为一个名为“nightmicu/yaml”的包发布。然后你可以告诉作曲家“nightmicu/yaml”替换了“symfony/yaml”。然后,您安装的任何其他依赖于“symfony/yaml”的软件包都将通过“nightmicu/yaml”来满足。

    • 它允许人们发布包作为单个组件,以及一个完整的库,例如symfony 框架包替换了它的每个组件包。

    问题在于,直到大约 1 小时前,replace 关键字在整个 Packagist 的全球范围内都有效。

    这意味着对于已分叉和重命名的流行库,有大量可能的版本可供安装。这就是导致大量内存使用的原因,并且需要很长时间来处理。

    如果您获得了最新版本的 composer.phar,现在应该会更好,因为“替换”现在的工作方式有所不同,仅适用于根 composer.json 中命名的包,即您必须在您的composer.json 让它既可以替换也可以作为替换,尽管我自己无法测试它。

    【讨论】:

      【解决方案7】:

      如果您有 8 GB 或更多的 RAM,那么您当然可以将 PHP memory_limit 增加到 1 GB 或 512MB。在你的 Mac 打开终端-

      1. 找到 PHP 内存限制配置文件。
      php --ini
      
      1. 编辑php-memory-limits.ini 文件。
      nano /usr/local/etc/php/7.4/conf.d/php-memory-limits.ini
      
      1. 将内存限制增加到 1 GB
      memory_limit = 1G
      
      1. 验证内存限制是否增加。
      php -r "echo ini_get('memory_limit').PHP_EOL;"
      
      1. 重新启动 PHP 服务。
      brew services restart php
      

      完成了。增加内存限制也会减少一点composer update的完成时间,这很好。

      如果你想加快composer update 时间。尝试安装流行的 - Prestissimo 包。

      【讨论】:

        【解决方案8】:

        在 Windows 上解决此问题的最简单方法是:

        转到:C:\ProgramData\ComposerSetup\bin

        编辑 composer.bat

        改成:

        @ECHO OFF
        php -d memory_limit=-1 "%~dp0composer.phar" %*
        

        保存文件并运行:

        作曲家自我更新

        【讨论】:

        • 把什么改成什么?我应该用你的建议替换批处理文件吗?
        【解决方案9】:

        不要做任何事情,如果您的版本是 1.*,请尝试此代码:

         composer self-update --2   
        

        我遇到了很多问题,然后我给了 memory_limit : 10G。之后我遇到了同样的问题然后我尝试更新作曲家版本然后它就解决了。 你可以检查编译器版本

         composer --version
        

        【讨论】:

          【解决方案10】:

          你可以试试这个 COMPOSER_MEMORY_LIMIT=-1作曲家 喜欢这个选择器

          【讨论】:

          • 对不起,第一次也是最后一次
          猜你喜欢
          • 2015-02-24
          • 2018-06-18
          • 1970-01-01
          • 2021-11-30
          • 2018-04-22
          • 1970-01-01
          • 1970-01-01
          • 2013-12-15
          相关资源
          最近更新 更多