Kompozytor został zabity podczas aktualizacji

118

Mam problem, próbowałem zainstalować nowy pakiet do mojego projektu Laravel 4. Ale kiedy biegnę php composer.phar update, dostaję to:

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

Szukałem problemu w Internecie i zobaczyłem, że problem jest z pamięcią, chyba nie mam wystarczającej ilości pamięci RAM, sprawdziłem, mam około 411 MB wolnego miejsca. Czy kompozytor naprawdę potrzebuje więcej pamięci RAM?

user3038158
źródło

Odpowiedzi:

296

Komunikat „Killed” zwykle oznacza, że ​​proces zużywał zbyt dużo pamięci, więc jeśli to możliwe, możesz po prostu dodać więcej pamięci do systemu. W momencie pisania tej odpowiedzi musiałem zwiększyć pamięć mojej maszyny wirtualnej do co najmniej 768 MB, aby uzyskaćcomposer update w niektórych sytuacjach do pracy.

Jeśli jednak robisz to na serwerze rzeczywistym, composer updatew ogóle nie powinieneś używać . Zamiast tego powinieneś zrobić:

  1. Uruchom composer updatew środowisku lokalnym (na przykład bezpośrednio na fizycznym laptopie / komputerze stacjonarnym lub w kontenerze / maszynie wirtualnej platformy docker uruchomionej na laptopie / komputerze stacjonarnym), w którym ograniczenia pamięci nie powinny być tak poważne.
  2. Prześlij lub git push plik composer.lock.
  3. Uruchom composer installna serwerze rzeczywistym.

composer installbędzie wtedy czytać z pliku .lock, pobierając za każdym razem dokładnie te same wersje, zamiast znajdować najnowsze wersje każdego pakietu. Dzięki temu Twoja aplikacja jest mniej podatna na awarie, a kompozytor zużywa mniej pamięci.

Przeczytaj więcej tutaj: https://getcomposer.org/doc/01-basic-usage.md#installing-with-composer-lock

Alternatywnie możesz przesłać cały vendorkatalog na serwer, omijając composer installw ogóle potrzebę uruchamiania , ale wtedy powinieneś uruchomić composer dump-autoload --optimize.

Andreas
źródło
5
Kiedy wgrałem plik composer.lock i uruchomiłem instalację kompozytora, zadziałało. Dzięki!
Ehsan
To nie działa dla mnie, composer był instalatorem przez apt, więc usuwam go i instaluję ręcznie, a potem wszystko działa dobrze.
rafaelphp
2
Mam ten problem na komputerze lokalnym.
afilina
Do lokalnego rozwoju na pewno wybierz @ Balmipor's Answer lub inny serwer z niewielką ilością pamięci RAM.
Shawn Pivonka
73

Jeśli tak jak ja używasz jakiejś mikro maszyny wirtualnej, której brakuje pamięci, utworzenie pliku wymiany załatwia sprawę:

#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

Jak wskazało kilka komentarzy, nie zapomnij dodać sudo jeśli nie pracujesz jako root.

przy okazji, możesz wybrać inną lokalizację / nazwę pliku / rozmiar pliku.
/varprawdopodobnie nie jest najlepszym miejscem, ale nie wiem, które to miejsce byłoby i rzadko się tym przejmuje, ponieważ małe serwery są głównie używane do celów testowych.

Balmipour
źródło
4
Nie zapomnij o sudo- musiałem użyć uprawnień roota, aby uruchomić te polecenia.
MacDada
powrócić swapon: swapfile: swapon failed: Operation not permitted, dlaczego?
Muhammad Dyas Yaskur
@Muhammad Dyas Yaskur Jeśli nie masz problemu z uprawnieniami (pamiętaj, aby pracować jako root lub używać sudo), czy masz coś szczególnego w swojej konfiguracji (system operacyjny, typ dysku itp.)?
Balmipour
1
Najlepiej uruchamiać te polecenia w modelu root. `` sudo su ''
dheeraj
1
@Balmipour Używam pudełka Laravel Homestead * Homestead v10.12.0, v11.0.2 * Settler v9.5.1 (Ubuntu 18.04) * Settler v10.0.0 (Ubuntu 20.04) Byłbym wdzięczny, gdybym zrobił "sudo su" działał bez sudo.
Shawn Pivonka
19

Niestety, kompozytor wymaga dużej ilości pamięci RAM i dużej mocy obliczeniowej. Oto kilka rzeczy, które zrobiłem i które razem sprawiły, że proces był znośny. To było na moim chmurze env.

  1. Być może po prostu kończy się pamięć RAM. Włącz wymianę: https://www.digitalocean.com/community/search?q=add+swap (uwaga: myślę, że najlepszą praktyką jest dodanie oddzielnej partycji. Przewodnik Digitalocean jest odpowiedni dla ich środowiska)
  2. service mysql stop (zabij swoje usługi DB / mem-hog, aby zwolnić trochę pamięci RAM - nie zapomnij uruchomić go ponownie!)
  3. użyj dodatkowej uruchomionej sesji terminala top aby obserwować zużycie pamięci / wymiany, aż do zakończenia procesu.
  4. composer.phar update --prefer-dist -vvv(szczegółowe wyjście [nadal zawiesza się w niektórych momentach podczas pracy] i użyj plików zip w dystrybucji). Może spróbuj--dry-run też?
  5. Kompozytor najwyraźniej działa wolniej w starszych wersjach PHP (np. 5.3x). W 5.5.9 było to dla mnie nadal wolne ...
alirobe
źródło
Wymieniłem topprzez htop, bardziej wygodne.
DevonDahon
Spójrz także na tworzenie pliku wymiany
Hari Harker
8

Poprawka DigitalOcean niewymagająca dodatkowej pamięci - aktywacja wymiany, oto przykład dla 1GB:

w terminalu uruchomić poniżej

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

Powyższe rozwiązanie będzie działać do następnego restartu, po czym wymiana będzie musiała zostać ponownie aktywowana. Aby zachować go między ponownymi uruchomieniami, dodaj plik wymiany do fstab:

sudo nano /etc/fstab

otwórz powyższy plik dodaj dodaj poniższą linię do pliku

/var/swap.1 swap swap sw 0 0

teraz zrestartuj serwer. Kompozytor wymaga działa dobrze.

Hemamalini
źródło
6

Uruchom composer self-updatei composer clearcache usuń dostawcę i composer.lock, zrestartuj środowisko lokalne, a następnie uruchom php -d memory_limit=-1 /usr/local/bin/composer install

farnoosh
źródło
2

Otrzymałem ten błąd, gdy uruchomiłem composer installwewnątrz mojego kontenera PHP DOCKER. Problem dotyczy pamięci. Rozwiązany przez zwiększenie pamięci SWAP w DOCKER PREFERENCES z 512 MB do 1,5 GB

Inoubli
źródło
a jak ty to robisz?
max4ever
kliknij prawym przyciskiem myszy na ikonę pulpitu Docker -> Preferencje -> Rousources
Inoubli
2

Zwiększ limit pamięci dla kompozytora

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

Może być konieczne ponowne uruchomienie po tej zmianie

GiorgosK
źródło
0

Otrzymuję ten problem spowodowany pakietem, który nie aktualizuje się poprawnie za pomocą symboli wieloznacznych, używam bezpośrednio ostatniej wersji i wreszcie działa.

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

juananruiz
źródło
0

Oto jak udało mi się zainstalować pakiet maatwebsite \ excel z programu composer w Laravel Framework:

  1. Pobieram pliki composer.json i composer.lock z mojego zdalnego serwera.
  2. Uruchamiam composer updatez lokalnego wiersza poleceń (następnie czekam, aż zakończy się cały proces instalacji).
  3. Prześlij plik composer.lock na zdalny serwer.
  4. uruchomić composer installna serwerze zdalnym (następnie poczekaj, aż cały proces się zakończy).
  5. GOTOWE
Tito Panji
źródło
-1

php -d memory_limit = Aktualizacja 5G composer.phar

Ali Özyıldırım
źródło
Dodaj wyjaśnienie do swojego kodu, aby inni mogli się z niego nauczyć
Nico Haase
-1

Rozwiązany na Laravel / Homestead (Vagrant Windows)

  1. Edytuj Homestead.yamli zwiększ pamięć z 2048 do 4096

  2. włóczęga się

  3. vagrant ssh

  4. Zainstaluj Symfony z tą linią w wybranym folderze (musi być bez plików)

    COMPOSER_MEMORY_LIMIT=-1 composer create-project symfony/website-skeleton . -s dev
davidjimenez75
źródło
-2

Możesz spróbować ustawić preferred-installto "dist"w konfiguracji Composer.

XedinNieznany
źródło
To pytanie dotyczy instalacji jakiegoś projektu Laravel. Jak ma się do tego twoja odpowiedź?
Nico Haase
To pytanie dotyczy instalacji pakietu. W szczególności chodzi o problemy z instalacją pakietu, które są związane z pamięcią RAM. Dlaczego 2 lata temu zawarłem informację o WP w odpowiedzi? Nie wiem Zaktualizowałem teraz odpowiedź, która IMO jest teraz bardzo istotna.
XedinUnknown
-3

Otrzymałem ten błąd w lokalnym środowisku Dockera. Rozwiązałem to, po prostu ponownie uruchamiając Dockera.

Loopy
źródło