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?

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.


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.


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í ...

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.


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


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


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


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"



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


-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

-2

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


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.