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

50

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

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

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

Спасибо

Теги:
composer-php
laravel-4

8 ответов

149
Лучший ответ

Сообщение "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#composer-lock-the-lock-file

  • 0
    Застрял в случайной проблеме в течение нескольких часов, так или иначе это сэкономило больше моего времени, потраченного на эту проблему !!!
  • 2
    Когда я загрузил composer.lock и запустил composer, установка работала. Спасибо!
Показать ещё 2 комментария
33

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

free -m
mkdir -p /var/_swap_
cd /var/_swap_
#Here, 1M * 2000 ~= 2GB of swap memory
dd if=/dev/zero of=swapfile bs=1M count=2000
mkswap swapfile
swapon swapfile
chmod 600 swapfile
echo "/var/_swap_/swapfile none swap sw 0 0" >> /etc/fstab
#cat /proc/meminfo
free -m

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

  • 1
    Не забывайте о sudo - мне пришлось использовать привилегии root для запуска этих команд.
  • 0
    вернуть swapon: swapfile: swapon failed: Operation not permitted , почему?
Показать ещё 3 комментария
10

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

  • 2
    Это был случай в моем номере.
6

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

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

Вы можете попробовать что-то вроде этого

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

Исправление 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

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

0

Вы можете настроить preferred-install на "dist" в конфигурации WP CLI Composer - обычно на ~/.wp-cli/packages/composer.json.

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню