Композитор убит при обновлении


118

У меня проблема, я попытался установить новый пакет в свой проект Laravel 4. Но когда я бегу, php composer.phar updateполучаю вот что:

Loading composer repositories with package information
Updating dependencies (including require-dev)
Killed

Я поискал проблему в Интернете и увидел, что проблема в памяти, я думаю, у меня недостаточно оперативной памяти, я проверил это, у меня около 411 МБ свободно. Композитору действительно нужно больше оперативной памяти?

Ответы:


297

Сообщение «Killed» обычно означает, что ваш процесс потребляет слишком много памяти, поэтому вам может просто потребоваться добавить больше памяти в вашу систему, если это возможно. На момент написания этого ответа мне пришлось увеличить память моей виртуальной машины как минимум до 768 МБ, чтобы можно composer updateбыло работать в некоторых ситуациях.

Однако, если вы делаете это на реальном сервере, вам вообще не следует использовать composer update. Вместо этого вам следует сделать следующее:

  1. Запускать composer updateв локальной среде (например, непосредственно на вашем физическом ноутбуке / настольном компьютере или в докер-контейнере / виртуальной машине, работающей на вашем ноутбуке / настольном компьютере), где ограничения памяти не должны быть такими серьезными.
  2. Загрузите или git pushфайл composer.lock.
  3. Запускаем composer installна живом сервере.

composer installзатем будет читать из файла .lock, получая каждый раз одни и те же версии, а не находить последние версии каждого пакета. Это снижает вероятность поломки вашего приложения, а композитор использует меньше памяти.

Подробности читайте здесь: https://getcomposer.org/doc/01-basic-usage.md#installing-with-composer-lock

В качестве альтернативы вы можете загрузить весь vendorкаталог на сервер, composer installвообще избегая необходимости запускать , но тогда вы должны запустить composer dump-autoload --optimize.


5
Когда я загрузил composer.lock и запустил composer install, работал. Спасибо!
Ehsan

У меня это не работает, композитор был установщиком apt, поэтому я удаляю его и устанавливаю вручную, тогда все работает нормально.
rafaelphp

2
У меня проблема на локальном компьютере.
afilina

Для локальной разработки обязательно используйте @ Balmipor's Answer или любой другой сервер с небольшим количеством оперативной памяти.
Шон Пивонка,

73

Если, как и я, вы используете какую-то микро-виртуальную машину с нехваткой памяти, создание файла подкачки поможет:

#Check free memory before
free -m

mkdir -p /var/_swap_
cd /var/_swap_
#Here, 1M * 2000 ~= 2GB of swap memory.  Feel free to add MORE
dd if=/dev/zero of=swapfile bs=1M count=2000
mkswap swapfile
swapon swapfile
chmod 600 swapfile
#Automatically mount this swap partition at startup
echo "/var/_swap_/swapfile none swap sw 0 0" >> /etc/fstab

#Check free memory after
free -m

Как указывалось в нескольких комментариях, не забудьте добавить sudo, если вы не работаете с правами root.

Кстати, не стесняйтесь выбирать другое местоположение / имя файла / размер для файла.
/varэто, вероятно, не лучшее место, но я не знаю, какое это место, и меня это редко волнует, поскольку крошечные серверы в основном используются для тестирования.


4
Не забывайте о том, sudoчто для выполнения этих команд мне пришлось использовать привилегии root.
MacDada

вернуться swapon: swapfile: swapon failed: Operation not permitted, почему?
Мухаммад Дьяс Яскур

@Muhammad Dyas Yaskur Если у вас нет проблем с правами доступа (убедитесь, что вы работаете как root или используете sudo), есть ли у вас что-нибудь особенное в вашей конфигурации (ОС, тип диска и т. Д.)?
Balmipour 05

1
Команды thosw лучше всего запускать в корневой модели. `` sudo su``
dheeraj

1
@Balmipour Я использую коробку Laravel Homestead * Homestead v10.12.0, v11.0.2 * Settler v9.5.1 (Ubuntu 18.04) * Settler v10.0.0 (Ubuntu 20.04) Я был бы благодарен за то, что если бы я сделал "sudo su", тогда он работал без sudo.
Шон Пивонка,

19

К сожалению, композитору требуется много оперативной памяти и вычислительной мощности. Вот несколько вещей, которые я сделал, которые в совокупности сделали процесс сносным. Это было на моем облачном манеже env.

  1. Возможно, вам просто не хватает оперативной памяти. Включите свопинг: https://www.digitalocean.com/community/search?q=add+swap (примечание: я думаю, что лучше всего добавить отдельный раздел. Руководство Digitalocean подходит для их среды)
  2. service mysql stop (убейте свои службы DB / mem-hog, чтобы освободить немного оперативной памяти - не забудьте запустить их снова!)
  3. используйте вторичный сеанс терминала, topчтобы наблюдать за потреблением памяти / подкачки до завершения процесса.
  4. composer.phar update --prefer-dist -vvv(подробный вывод [все еще зависает в некоторых моментах при работе] и используются zip-файлы дистрибутива). Может, попробовать --dry-runтоже?
  5. Очевидно, что Composer работает медленнее в более старых версиях PHP (например, 5.3x). У меня все еще было медленно в 5.5.9 ...

Заменил topна htop, удобнее.
DevonDahon

Также обратите внимание на создание файла подкачки
Хари Харкер,

8

Исправление DigitalOcean, не требующее дополнительной памяти - активация подкачки, вот пример для 1 ГБ:

в терминале запустить ниже

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

Приведенное выше решение будет работать до следующей перезагрузки, после чего своп придется повторно активировать. Чтобы сохранить его между перезагрузками, добавьте файл подкачки в fstab:

sudo nano /etc/fstab

откройте указанный выше файл, добавьте в файл строку ниже

/var/swap.1 swap swap sw 0 0

теперь перезапустите сервер. Требование композитора работает нормально.


6

Запустите composer self-updateи composer clearcache удалите vendor и composer.lock, перезапустите локальную среду, а затем запустите php -d memory_limit=-1 /usr/local/bin/composer install


2

У меня composer installвозникла эта ошибка, когда я запустил свой контейнер PHP DOCKER. Это проблема с памятью. Решено путем увеличения SWAP-памяти в DOCKER PREFERENCES с 512 МБ до 1,5 ГБ


и как ты это делаешь?
max4ever

щелкните правой кнопкой мыши значок Docker Desktop -> Настройки -> Rousources
Inoubli

2

Увеличьте лимит памяти для композитора

php -d memory_limit=4G /usr/local/bin/composer update

После этого изменения может потребоваться перезагрузка


0

Я получаю эту проблему из-за пакета, который некорректно обновляется с помощью подстановочных знаков, я использую напрямую последнюю версию, и она наконец работает.

"l3 / cas-bundle": "~ 1.0" -------> "l3 / cas-bundle": "1.1.13"


0

Вот как мне удалось установить пакет maatwebsite \ excel из композитора в Laravel Framework:

  1. Я загружаю файлы composer.json и composer.lock со своего удаленного сервера.
  2. Я запускаю composer updateиз локальной командной строки (затем жду завершения всего процесса установки).
  3. Загрузите файл composer.lock на удаленный сервер.
  4. запустить composer installна удаленном сервере (затем дождаться завершения всего процесса).
  5. СДЕЛАНО

0

Если вы используете докер, вы можете использовать COMPOSER_PROCESS_TIMEOUT

environment:
  COMPOSER_MEMORY_LIMIT: -1
  COMPOSER_PROCESS_TIMEOUT: 2000 #seconds

3
иногда люди копируют. делитесь текстом, а не изображениями.
ssi-anik


-1

Решено на Laravel / Homestead (бродячие окна)

  1. Изменить Homestead.yamlи увеличить память с 2048 до 4096

  2. бродить

  3. бродячий ssh

  4. Установите Symfony с этой строкой в ​​выбранную вами папку (должна быть без файлов)

    COMPOSER_MEMORY_LIMIT=-1 composer create-project symfony/website-skeleton . -s dev

-2

Вы можете попробовать настройки preferred-installдля "dist"в Composer конфигурации.


Этот вопрос касается установки какого-нибудь проекта Laravel. Как ваш ответ связан с этим?
Нико Хаасе

Этот вопрос касается установки пакета. В частности, речь идет о проблемах с установкой пакета, связанных с оперативной памятью. Почему я включил в ответ информацию о WP 2 года назад? Я не знаю. Теперь я обновил ответ, который сейчас очень актуален IMO.
XedinUnknown

-3

Я получал эту ошибку в локальной среде Docker. Я решил это, просто перезапустив Докер.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.