Ответ 1
Решено, удалив всю папку поставщика, а затем снова выполнив обновление композитора, и оно работает... как-то. Я даже не понимаю: v
Я получил эту ошибку при запуске 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. Может ли кто-нибудь помочь?
Решено, удалив всю папку поставщика, а затем снова выполнив обновление композитора, и оно работает... как-то. Я даже не понимаю: v
Посмотрите вики по устранению неполадок Composer, особенно в разделе об ошибках ограничения памяти.
Например, запустив композитор следующим образом:
php -d memory_limit=-1 'which composer' update
Я больше не получаю ошибки. Таким образом, это, вероятно, проблема с нехваткой памяти, которая может быть решена встроенным образом без изменения конфигурации PHP по умолчанию.
Команда, приведенная выше, заключается в том, что она устанавливает ограничение памяти CLI PHP на "unlimited" (т.е. -1), а затем запускает команду composer update
встроенного компоновщика.
Обратите внимание, что вместо "какой композитор" вы, вероятно, должны использовать реальный путь вашего PHP-скрипта composer.phar
. which composer
написанный встроенным (как в моем примере выше), будет встроен в ваш полный путь composer.phar
(вы можете использовать любую форму, какую захотите).
Единственное, что решило мою проблему, делало это:
/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
/sbin/mkswap /var/swap.1
/sbin/swapon /var/swap.1
Исходя из моего опыта, ошибки памяти компоновщика обычно означают, что он тратит слишком много памяти на поиск правильных комбинаций пакетов для установки, особенно ограничения версии недостаточно конкретны. Например, ^ 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.
Это проблема памяти, а не проблема с хранилищем. Вы достигаете предела памяти PHP.
Измените/etc/php.ini и увеличьте предел памяти (memory_limit = 128M замените на memory_limit = 256M)
Я бы посоветовал вам искать причину, по которой композитор использует столько памяти, и находит способы сократить использование памяти PHP:
Это проблема, с которой вы сталкиваетесь: https://github.com/composer/composer/issues/1898
В моем случае я столкнулся с этой ошибкой из-за запуска composer install
внутри vagrant box. Запуск его внутри моей хост-машины не вызвал проблемы.
Композитор может иногда терпеть неудачу на некоторых командах с этим сообщением:
Неустранимая ошибка 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)
Вы также можете решить проблему, просто удалив каталог vendor и повторите команду установки composer.
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
Я работаю на Windows и попробовал все ответы на этот вопрос, но ни один из них не сработал. Для меня это НАКОНЕЦ сработало после того, как я запустил композитор , используя 64-битную версию PHP.
Чтобы запустить composer с использованием локальной копии PHP x64, вы можете сделать следующее:
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
sudo php -d memory_limit=-1 bin/magento setup:di:compile