Compositor morto durante a atualização


118

Tive um problema, tentei instalar um novo pacote no meu projeto Laravel 4. Mas quando eu corro php composer.phar update, recebo o seguinte:

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

Procurei o problema na Internet e vi que o problema é a memória, acho que não tenho RAM suficiente disponível, verifiquei que tenho cerca de 411 MB livres. O compositor realmente precisa de mais RAM?

Respostas:


295

A mensagem "Killed" geralmente significa que seu processo consumiu muita memória, então você pode simplesmente precisar adicionar mais memória ao seu sistema, se possível. No momento em que escrevi esta resposta, tive que aumentar a memória da minha máquina virtual para pelo menos 768 MB, a fim de obtercomposer update poder trabalhar em algumas situações.

No entanto, se você estiver fazendo isso em um servidor ativo, você não deve usar composer updatenada. O que você deve fazer é:

  1. Execute composer updateem um ambiente local (como diretamente em seu laptop / desktop físico ou um contêiner docker / VM em execução em seu laptop / desktop) onde as limitações de memória não devem ser tão graves.
  2. Faça upload ou git pusho arquivo composer.lock.
  3. Execute composer installno servidor ao vivo.

composer installirá então ler o arquivo .lock, buscando as mesmas versões sempre, em vez de encontrar as versões mais recentes de cada pacote. Isso torna seu aplicativo menos provável de quebrar e o composer usa menos memória.

Leia mais aqui: https://getcomposer.org/doc/01-basic-usage.md#installing-with-composer-lock

Como alternativa, você pode fazer upload de todo o vendordiretório para o servidor, evitando a necessidade de execução composer install, mas deve executar composer dump-autoload --optimize.


5
Quando carreguei composer.lock e executei a instalação do composer funcionou. Obrigado!
Ehsan

Isso não funciona para mim, o composer foi instalador pelo apt, então eu removo e instalo manualmente, então tudo funciona bem.
rafaelphp

2
Estou tendo esse problema em uma máquina local.
afilina

Para o desenvolvimento local com certeza vá com a Resposta de @Balmipor, ou qualquer outro servidor com uma pequena quantidade de memória RAM.
Shawn Pivonka

73

Se, como eu, você está usando alguma micro VM com falta de memória, criar um arquivo de troca resolve:

#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

Como vários comentários apontaram, não se esqueça de adicionar sudo se você não trabalhar como root.

btw, fique à vontade para selecionar outro local / nome de arquivo / tamanho para o arquivo.
/varprovavelmente não é o melhor lugar, mas não sei qual seria, e raramente me importo, pois servidores minúsculos são usados ​​principalmente para fins de teste.


4
Não se esqueça sudo- eu tive que usar privilégios de root para executar esses comandos.
MacDada

voltar swapon: swapfile: swapon failed: Operation not permitted, por quê?
Muhammad Dyas Yaskur

@Muhammad Dyas Yaskur Se você não tem nenhum problema de permissão (certifique-se de trabalhar como root ou usar sudo), você tem mais alguma coisa em particular em sua configuração (sistema operacional, tipo de unidade, etc.)?
Balmipour de

1
É melhor executar esses comandos no modelo raiz. `` `sudo su```
dheeraj

1
@Balmipour Eu uso a caixa Laravel Homestead * Homestead v10.12.0, v11.0.2 * Settler v9.5.1 (Ubuntu 18.04) * Settler v10.0.0 (Ubuntu 20.04) Eu agradeceria se tivesse feito "sudo su", então teria funcionou sem sudo.
Shawn Pivonka

19

Infelizmente, o compositor requer muita RAM e poder de processamento. Aqui estão algumas coisas que eu fiz, que combinadas, tornaram o processo suportável. Isso foi no meu env do cercadinho na nuvem.

  1. Você pode estar simplesmente ficando sem RAM. Habilite a troca: https://www.digitalocean.com/community/search?q=add+swap (nota: acho que a melhor prática é adicionar uma partição separada. O guia da Digitalocean é apropriado para o ambiente)
  2. service mysql stop (elimine seus serviços de banco de dados / mem-hog para liberar um pouco de RAM - não se esqueça de iniciá-lo novamente!)
  3. use uma sessão de terminal secundária em execução toppara observar o consumo de memória / troca até que o processo seja concluído.
  4. composer.phar update --prefer-dist -vvv(saída detalhada [ainda trava em alguns pontos durante o trabalho] e usa arquivos zip de distribuição). Talvez tente --dry-runtambém?
  5. Aparentemente, o Composer funciona mais lentamente em versões anteriores do PHP (por exemplo, 5.3x). Ainda estava lento em 5.5.9 para mim ...

Substituído toppor htop, mais conveniente.
DevonDahon

Veja também a criação de arquivo de troca
Hari Harker

8

Correção DigitalOcean que não requer memória extra - troca de ativação, aqui está um exemplo para 1 GB:

no terminal executado abaixo

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

A solução acima funcionará até a próxima reinicialização, depois disso, a troca deverá ser reativada. Para persistir entre as reinicializações, adicione o arquivo de troca ao fstab:

sudo nano /etc/fstab

abrir o arquivo acima adicionar adicionar linha abaixo ao arquivo

/var/swap.1 swap swap sw 0 0

agora reinicie o servidor. Requer Composer funciona bem.


6

Execute composer self-updatee composer clearcache remova vendor e composer.lock reinicie seu ambiente local e execute php -d memory_limit=-1 /usr/local/bin/composer install


2

Recebi este erro quando executei composer installdentro do meu contêiner PHP DOCKER. É um problema de memória. Resolvido aumentando a memória SWAP em DOCKER PREFERENCES de 512 MB para 1,5 GB


E como você faz isso ?
max4ever

clique com o botão direito no ícone do Docker Desktop -> Preferências -> Recursos
Inoubli

2

Aumente o limite de memória do compositor

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

Pode ser necessário reiniciar após esta mudança


0

Eu recebo esse problema causado por um pacote que não atualiza corretamente com curingas, uso diretamente a última versão e finalmente funciona.

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



0

Veja como consegui instalar o pacote maatwebsite \ excel do composer no Laravel Framework:

  1. Eu baixei o arquivo composer.json e o arquivo composer.lock do meu servidor remoto.
  2. Eu corro a composer updatepartir do prompt de comando local (então espero até que todo o processo de instalação termine).
  3. Faça upload do arquivo composer.lock para o servidor remoto.
  4. execute composer installem um servidor remoto (então espere até que todo o processo termine).
  5. FEITO

-1

php -d memory_limit = 5G composer.phar update


Adicione alguma explicação ao seu código para que outras pessoas possam aprender com ele
Nico Haase

-1

Resolvido no Laravel / Homestead (Vagrant Windows)

  1. Edite Homestead.yamle aumente a memória de 2048 a 4096

  2. vagabundo

  3. vagrant ssh

  4. Instale o Symfony com esta linha na pasta que você escolher (deve estar sem arquivos)

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

-2

Você pode tentar definir preferred-installpara "dist"na configuração do Composer.


Esta questão é sobre como instalar algum projeto do Laravel. Como sua resposta está relacionada a isso?
Nico Haase

Esta questão é sobre como instalar um pacote. Especificamente, trata-se de problemas com a instalação de pacotes relacionados à RAM. Por que incluí informações sobre o WP na resposta há 2 anos? Eu não sei. Acabei de atualizar a resposta, que IMO é muito relevante agora.
XedinUnknown

-3

Eu estava recebendo este erro em um ambiente Docker local. Eu resolvi isso simplesmente reiniciando o Docker.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.