Compositor asesinado al actualizar

116

Tengo un problema, intenté instalar un nuevo paquete en mi proyecto Laravel 4. Pero cuando corro php composer.phar update, obtengo esto:

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

He buscado el problema en Internet y he visto que el problema es la memoria, creo que no tengo suficiente RAM disponible, he comprobado que tengo unos 411mb libres. ¿Composer realmente necesita más RAM?

user3038158
fuente

Respuestas:

293

El mensaje "Eliminado" generalmente significa que su proceso consumió demasiada memoria, por lo que es posible que simplemente necesite agregar más memoria a su sistema si es posible. En el momento de escribir esta respuesta, tuve que aumentar la memoria de mi máquina virtual a al menos 768 MB para poder composer updatetrabajar en algunas situaciones.

Sin embargo, si está haciendo esto en un servidor en vivo, no debería usar composer updatenada. Lo que debería hacer en su lugar es:

  1. Ejecute composer updateen un entorno local (como directamente en su computadora portátil / computadora de escritorio física, o en un contenedor de Docker / VM que se ejecuta en su computadora portátil / computadora de escritorio) donde las limitaciones de memoria no deberían ser tan severas.
  2. Sube o git pushel archivo composer.lock.
  3. Ejecutar composer installen el servidor en vivo.

composer installluego leerá del archivo .lock, obteniendo exactamente las mismas versiones cada vez en lugar de buscar las últimas versiones de cada paquete. Esto hace que sea menos probable que se rompa la aplicación y que Composer use menos memoria.

Lea más aquí: https://getcomposer.org/doc/01-basic-usage.md#installing-with-composer-lock

Alternativamente, puede cargar el vendordirectorio completo en el servidor, evitando la necesidad de ejecutarlo composer install, pero luego debe ejecutar composer dump-autoload --optimize.

Andreas
fuente
5
Cuando subí composer.lock y ejecuté la instalación de composer funcionó. ¡Gracias!
Ehsan
Esto no funciona para mí, composer fue instalador por apt, así que lo elimino e instalo manualmente, luego todo funciona bien.
rafaelphp
2
Tengo este problema en una máquina local.
afilina
Para el desarrollo local, vaya con @ Balmipor's Answer, o cualquier otro servidor con una pequeña cantidad de RAM.
Shawn Pivonka
71

Si, como yo, está utilizando una micro VM que carece de memoria, crear un archivo de intercambio funciona:

#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 señalaron varios comentarios, no olvide agregar sudo si no trabaja como root.

Por cierto, siéntase libre de seleccionar otra ubicación / nombre de archivo / tamaño para el archivo.
/varProbablemente no sea el mejor lugar, pero no sé cuál sería, y rara vez me importa, ya que los servidores pequeños se utilizan principalmente con fines de prueba.

Balmipour
fuente
4
No se olvide sudo: tuve que usar privilegios de root para ejecutar estos comandos.
MacDada
volver swapon: swapfile: swapon failed: Operation not permitted, ¿Por qué?
Muhammad Dyas Yaskur
@Muhammad Dyas Yaskur Si no tiene problemas de permisos (asegúrese de trabajar como root o usar sudo), ¿tiene algo más en particular en su configuración (sistema operativo, tipo de unidad, etc.)?
Balmipour
@Balmipour Ya lo usé como root pero aún no tengo permiso, mi sistema operativo es centos 7.0. [root@server _swap_]# dd if=/dev/zero of=swapfile bs=1M count=1000 1000+0 records in 1000+0 records out 1048576000 bytes (1.0 GB) copied, 2.79954 s, 375 MB/s [root@server _swap_]# ls -l total 1024004 -rw------- 1 root root 1048576000 Feb 6 02:12 swapfile [root@server _swap_]# mkswap swapfile Setting up swapspace version 1, size = 1023996 KiB no label, UUID=b3f1110e-5f43-4d1f-bbb1-71cad96680f9 [root@server _swap_]# swapon swapfile swapon: swapfile: swapon failed: Operation not permitted
Muhammad Dyas Yaskur
1
Es mejor ejecutar estos comandos en el modelo raíz. `` `sudo su```
dheeraj
19

Desafortunadamente, el compositor requiere mucha RAM y potencia de procesamiento. Aquí hay algunas cosas que hice, que combinadas hicieron que el proceso fuera soportable. Esto estaba en mi entorno de parque infantil en la nube.

  1. Es posible que simplemente se esté quedando sin RAM. Habilite el intercambio: https://www.digitalocean.com/community/search?q=add+swap (nota: creo que la mejor práctica es agregar una partición separada. La guía de Digitalocean es apropiada para su entorno)
  2. service mysql stop (elimine sus servicios DB / mem-hog para liberar algo de RAM; ¡no olvide iniciarlo de nuevo!)
  3. utilice una sesión de terminal secundaria en ejecución toppara observar el consumo de memoria / intercambio hasta que se complete el proceso.
  4. composer.phar update --prefer-dist -vvv(salida detallada [todavía se cuelga en algunos puntos cuando se trabaja] y usa archivos zip de distribución). ¿Quizás intentarlo --dry-runtambién?
  5. Aparentemente, se sabe que Composer se ejecuta más lento en versiones anteriores de PHP (por ejemplo, 5.3x). Todavía era lento en 5.5.9 para mí ...
alirobe
fuente
Reemplacé toppor htop, más conveniente.
DevonDahon
También busque la creación de un archivo de intercambio
Hari Harker
8

Solución de DigitalOcean que no requiere memoria adicional: activando el intercambio, aquí hay un ejemplo para 1gb:

en terminal ejecutar debajo

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

La solución anterior funcionará hasta el próximo reinicio, después de eso, el intercambio tendría que reactivarse. Para mantenerlo entre reinicios, agregue el archivo de intercambio a fstab:

sudo nano /etc/fstab

abra el archivo de arriba agregue agregar la línea de abajo al archivo

/var/swap.1 swap swap sw 0 0

ahora reinicie el servidor. El compositor requiere funciona bien.

Hemamalini
fuente
6

Ejecute composer self-updatey composer clearcache elimine vendor y composer.lock reinicie su entorno local y luego ejecute php -d memory_limit=-1 /usr/local/bin/composer install

farnoosh
fuente
2

Aumentar el límite de memoria para el compositor

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

Es posible que deba reiniciar después de este cambio

GiorgosK
fuente
1

Tengo este error cuando ejecuté composer installdentro de mi contenedor PHP DOCKER, es un problema de memoria. Resuelto aumentando la memoria SWAP en DOCKER PREFERENCES de 512 MB a 1,5 GB

Inoubli
fuente
Y cómo haces eso ?
max4ever
haga clic con el botón derecho en el icono de escritorio de Docker -> Preferencias -> Rousources
Inoubli
0

Recibo este problema causado por un paquete que no se actualiza correctamente con comodines, utilizo directamente la última versión y finalmente funciona.

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

juananruiz
fuente
0

Así es como logré instalar el paquete maatwebsite \ excel de composer en Laravel Framework:

  1. Descargo composer.json archivo y composer.lock archivo de mi servidor remoto.
  2. Corro composer update desde el símbolo del sistema local (luego espero hasta que finalice todo el proceso de instalación).
  3. Sube el archivo composer.lock al servidor remoto.
  4. ejecutar composer installen el servidor remoto (luego esperar hasta que todo el proceso finalice).
  5. HECHO
Tito Panji
fuente
-1

php -d memory_limit = 5G composer.phar actualización

Ali Özyıldırım
fuente
Agregue alguna explicación a su código para que otros puedan aprender de él
Nico Haase
-1

Resuelto en Laravel / Homestead (Vagrant Windows)

  1. Edite Homestead.yamly aumente la memoria de 2048 a 4096

  2. vagabundo

  3. vagabundo ssh

  4. Instale Symfony con esta línea en la carpeta que elija (debe estar sin archivos)

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

Usted puede tratar de ajuste preferred-installa "dist"en config Compositor.

XedinDesconocido
fuente
Esta pregunta trata sobre la instalación de algún proyecto de Laravel. ¿Cómo se relaciona tu respuesta con eso?
Nico Haase
Esta pregunta trata sobre la instalación de un paquete. Específicamente, se trata de problemas con la instalación de un paquete relacionados con la RAM. ¿Por qué incluí información sobre WP en la respuesta hace 2 años? No lo sé. Ahora he actualizado la respuesta, que en mi opinión es muy relevante ahora.
XedinUnknown
-3

Recibí este error en un entorno Docker local. Lo resolví simplemente reiniciando Docker.

Chiflado
fuente