Ошибка обновления композитора - из памяти

Я получил эту ошибку при запуске 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.*"
        }
}

VM недавно восстановилась из-за проблемы с плохим дисковым сектором, и парень, работающий с VM, сказал, что виртуальная машина была перенесена на новый диск. В моей виртуальной машине есть только Java, PHP, httpd, postgre, rabbitmq и сам сайт, и он уже отлично работает около 4 месяцев, прежде чем это произошло. Я использую PHP 5.6.11. Может ли кто-нибудь помочь?

Ответ 1

Решено, удалив всю папку поставщика, а затем снова выполнив обновление композитора, и оно работает... как-то. Я даже не понимаю: v

Ответ 2

Посмотрите вики по устранению неполадок Composer, особенно в разделе об ошибках ограничения памяти.

Например, запустив композитор следующим образом:

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

Я больше не получаю ошибки. Таким образом, это, вероятно, проблема с нехваткой памяти, которая может быть решена встроенным образом без изменения конфигурации PHP по умолчанию.

Команда, приведенная выше, заключается в том, что она устанавливает ограничение памяти CLI PHP на "unlimited" (т.е. -1), а затем запускает команду composer update встроенного компоновщика.

Обратите внимание, что вместо "какой композитор" вы, вероятно, должны использовать реальный путь вашего PHP-скрипта composer.phar. which composer написанный встроенным (как в моем примере выше), будет встроен в ваш полный путь composer.phar (вы можете использовать любую форму, какую захотите).

Ответ 4

Исходя из моего опыта, ошибки памяти компоновщика обычно означают, что он тратит слишком много памяти на поиск правильных комбинаций пакетов для установки, особенно ограничения версии недостаточно конкретны. Например, ^ 5.2.4 соответствует 5.3–5.3.29, 5.4–5.4.45 и т.д. Для каждой конкретной версии и перестановки композитор должен получить зависимости пакета, чтобы проверить, все ли ограничения соблюдены. Обычно это происходит, когда потребление памяти становится огромным.

Как только версии выяснены, фаза установки использует намного меньше памяти. Разрешенные версии для каждого пакета также хранятся в файле composer.lock, так что конкретная установленная перестановка может быть реплицирована в других средах. И это потенциальное решение вашей проблемы: запустите обновление composer на своем компьютере разработчика (на котором должно быть достаточно памяти), разверните обновленный composer.lock и запустите установку composer на сервере.

Установка Composer всегда будет ссылаться на существующий файл composer.lock для версий, устанавливаемых для каждого пакета, и, следовательно, должна редко сталкиваться с проблемами с памятью.

Справочную информацию о том, как выразить ограничения версии в composer.json, можно найти на странице https://getcomposer.org/doc/articles/versions.md.

Ответ 5

Это проблема памяти, а не проблема с хранилищем. Вы достигаете предела памяти PHP.

Измените/etc/php.ini и увеличьте предел памяти (memory_limit = 128M замените на memory_limit = 256M)

Я бы посоветовал вам искать причину, по которой композитор использует столько памяти, и находит способы сократить использование памяти PHP:

  • Обновление до PHP56, если вы еще не
  • Установите Zend Opcache (разделяет память PHP между разными экземплярами)
  • Удалите все неиспользуемые расширения PECL

Это проблема, с которой вы сталкиваетесь: https://github.com/composer/composer/issues/1898

Ответ 6

В моем случае я столкнулся с этой ошибкой из-за запуска composer install внутри vagrant box. Запуск его внутри моей хост-машины не вызвал проблемы.

Ответ 7

Ошибки ограничения памяти

Композитор может иногда терпеть неудачу на некоторых командах с этим сообщением:

Неустранимая ошибка PHP: исчерпан допустимый объем памяти в XXXXXX байт <...>

Или в моем случае:

Неустранимая ошибка: недостаточно памяти (выделено 1116733440) (попытка выделить 134217728 байт) в phar://C: /ProgramData/ComposerSetup/bin/composer.phar/src/Composer/DependencyResolver/Pool.php в строке 339

В этом случае 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 <...>

Эта проблема также может возникать в случаях cPanel, когда активирована защита от бомбы-снаряжения. Для получения дополнительной информации см. Документацию о функции вилочной бомбы на сайте cPanel.


Чтобы загрузить загруженные файлы php.ini, попробуйте:

php --ini

Источник: (Composer docs)

Ответ 8

Вы также можете решить проблему, просто удалив каталог vendor и повторите команду установки composer.

Ответ 9

Katiak ответ сработал, но я должен был изменить его. Для этого вам потребуется 2 ГБ свободного места для работы на компьютере с Linux. Убедитесь, что вы sudo команды, если вы не root:

/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 ГБ памяти подкачки с жесткого диска, которую ЦП может использовать для выполнения команды композитора.

Оригинальное решение, похоже, пришло из этой ветки Github, но я могу ошибаться:

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

Ответ 10

Я работаю на Windows и попробовал все ответы на этот вопрос, но ни один из них не сработал. Для меня это НАКОНЕЦ сработало после того, как я запустил композитор , используя 64-битную версию PHP.

Чтобы запустить composer с использованием локальной копии PHP x64, вы можете сделать следующее:

  1. Загрузите zip файл отсюда (я использовал версию VC15 x64 Thread Safe): https://windows.php.net/download
  2. Разархивируйте файл
  3. Скопируйте php.ini-development и переименуйте в php.ini
  4. Раскомментируйте строку extension_dir = "ext" и любые другие расширения php, которые вам понадобятся (например, extension=gd2 или extension=openssl). Если для обновления понадобятся другие расширения PHP, он сообщит вам об этом при запуске команды.

Рабочая команда:

"C:\path\to\php-7.2.23-Win32-VC15-x64\php.exe" -d memory_limit=-1 "C:/path/to/composer.phar" update

Источник: https://ourcodeworld.com/articles/read/816/how-to-solve-composer-install-update-error-virtualalloc-failed-0x00000008

Ответ 11

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