Compositeur tué lors de la mise à jour

118

J'ai eu un problème, j'ai essayé d'installer un nouveau package dans mon projet Laravel 4. Mais quand je cours, php composer.phar updatej'obtiens ceci:

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

J'ai cherché le problème sur Internet et j'ai vu que la mémoire est le problème, je pense que je n'ai pas assez de RAM disponible, j'ai vérifié cela, j'ai environ 411 Mo d'espace libre. Le compositeur a-t-il vraiment besoin de plus de RAM?

utilisateur3038158
la source

Réponses:

295

Le message "Tué" signifie généralement que votre processus a consommé trop de mémoire, vous devrez peut-être simplement ajouter plus de mémoire à votre système si possible. Au moment d'écrire cette réponse, j'ai dû augmenter la mémoire de ma machine virtuelle à au moins 768 Mo afin de pouvoir composer updatetravailler dans certaines situations.

Cependant, si vous faites cela sur un serveur en direct, vous ne devriez pas utiliser composer updatedu tout. Ce que vous devriez plutôt faire est:

  1. Exécutez composer updatedans un environnement local (tel que directement sur votre ordinateur portable / ordinateur de bureau physique, ou un conteneur / VM Docker s'exécutant sur votre ordinateur portable / ordinateur de bureau) où les limitations de mémoire ne devraient pas être aussi sévères.
  2. Téléchargez ou git pushle fichier composer.lock.
  3. Exécutez composer installsur le serveur en direct.

composer installlira alors à partir du fichier .lock, en récupérant exactement les mêmes versions à chaque fois plutôt que de trouver les dernières versions de chaque paquet. Cela rend votre application moins susceptible de se briser et le compositeur utilise moins de mémoire.

En savoir plus ici: https://getcomposer.org/doc/01-basic-usage.md#installing-with-composer-lock

Vous pouvez télécharger l'ensemble de vendorcontourner la nécessité d'exécuter le répertoire sur le serveur, composer installdu tout, mais alors vous devez exécuter composer dump-autoload --optimize.

Andreas
la source
5
Lorsque j'ai téléchargé composer.lock et exécuté l'installation de composer a fonctionné. Merci!
Ehsan
Cela ne fonctionne pas pour moi, composer a été installé par apt, donc je le supprime et l'installe manuellement, puis tout fonctionne bien.
rafaelphp
2
J'ai ce problème sur une machine locale.
afilina
Pour le développement local, optez pour @ Balmipor Answer, ou tout autre serveur avec une petite quantité de RAM.
Shawn Pivonka
73

Si comme moi, vous utilisez une micro VM manquant de mémoire, créer un fichier d'échange fait l'affaire:

#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

Comme plusieurs commentaires l'ont souligné, n'oubliez pas d'ajouter sudo si vous ne travaillez pas en tant que root.

btw, n'hésitez pas à sélectionner un autre emplacement / nom de fichier / taille pour le fichier.
/varn'est probablement pas le meilleur endroit, mais je ne sais pas quel endroit serait, et je m'en soucie rarement car les petits serveurs sont principalement utilisés à des fins de test.

Baume
la source
4
N'oubliez pas sudo- j'ai dû utiliser les privilèges root pour exécuter ces commandes.
MacDada
revenir swapon: swapfile: swapon failed: Operation not permitted, pourquoi?
Muhammad Dyas Yaskur le
@Muhammad Dyas Yaskur Si vous n'avez pas de problème d'autorisation (assurez-vous de travailler en tant que root ou d'utiliser sudo), avez-vous autre chose de particulier dans votre configuration (OS, type de lecteur, etc.)?
Balmipour
1
Il est préférable d'exécuter ces commandes dans le modèle racine. `` `` sudo su```
dheeraj
1
@Balmipour J'utilise la boîte Laravel Homestead * Homestead v10.12.0, v11.0.2 * Settler v9.5.1 (Ubuntu 18.04) * Settler v10.0.0 (Ubuntu 20.04) Je remercierais d'avoir fait "sudo su" alors il aurait travaillé sans sudo.
Shawn Pivonka
19

Malheureusement, le compositeur nécessite beaucoup de RAM et de puissance de traitement. Voici quelques choses que j'ai faites, qui combinées, ont rendu le processus supportable. C'était sur mon parc en nuage env.

  1. Vous manquez peut-être simplement de RAM. Activer le swap: https://www.digitalocean.com/community/search?q=add+swap (note: je pense que la meilleure pratique consiste à ajouter une partition séparée. Le guide de Digitalocean est adapté à leur environnement)
  2. service mysql stop (tuez vos services DB / mem-hog pour libérer de la RAM - n'oubliez pas de le redémarrer!)
  3. utiliser une session de terminal secondaire en cours d'exécution toppour surveiller la consommation de mémoire / d'échange jusqu'à ce que le processus soit terminé.
  4. composer.phar update --prefer-dist -vvv(sortie verbeuse [se bloque toujours à certains moments lorsque vous travaillez] et utilise des fichiers zip de distribution). Peut-être essayer un --dry-runaussi?
  5. Composer est apparemment connu pour fonctionner plus lentement dans les anciennes versions de PHP (par exemple 5.3x). C'était encore lent en 5.5.9 pour moi ...
alirobe
la source
J'ai remplacé toppar htop, plus pratique.
DevonDahon
Regardez également dans la création de fichier d'échange
Hari Harker
8

Correction de DigitalOcean qui ne nécessite pas de mémoire supplémentaire - activation du swap, voici un exemple pour 1 Go:

dans le terminal exécuter ci-dessous

/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 solution ci-dessus fonctionnera jusqu'au prochain redémarrage, après quoi le swap devra être réactivé. Pour le conserver entre les redémarrages, ajoutez le fichier d'échange à fstab:

sudo nano /etc/fstab

ouvrir le fichier ci-dessus ajouter ajouter la ligne ci-dessous au fichier

/var/swap.1 swap swap sw 0 0

redémarrez maintenant le serveur. Le compositeur nécessite des travaux très bien.

Hemamalini
la source
6

Exécutez composer self-updateet composer clearcache supprimez fournisseur et composer.lock, redémarrez votre environnement local, puis exécutez php -d memory_limit=-1 /usr/local/bin/composer install

Farnoosh
la source
2

J'ai cette erreur lorsque j'ai couru composer installdans mon conteneur PHP DOCKER, c'est un problème de mémoire. Résolu en augmentant la mémoire SWAP dans DOCKER PREFERENCES de 512 Mo à 1,5 Go

Inoubli
la source
Et comment faites-vous cela ?
max4ever
faites un clic droit sur l'icône du bureau Docker -> Préférences -> Rousources
Inoubli
2

Augmenter la limite de mémoire pour le compositeur

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

Il pourrait être nécessaire de redémarrer après ce changement

GiorgosK
la source
0

Je reçois ce problème causé par un package qui ne se met pas à jour correctement avec des caractères génériques, j'utilise directement la dernière version et cela fonctionne enfin.

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

Juananruiz
la source
0

Si vous utilisez docker, vous pouvez utiliser COMPOSER_PROCESS_TIMEOUT

entrez la description de l'image ici

max4ever
la source
3
parfois les gens copient. partagez du texte, pas des images.
ssi-anik le
0

Voici comment j'ai réussi à installer le package maatwebsite \ excel de composer dans Laravel Framework:

  1. Je télécharge le fichier composer.json et le fichier composer.lock depuis mon serveur distant.
  2. Je cours à composer updatepartir de l'invite de commande locale (puis attendez que tout le processus d'installation soit terminé).
  3. Téléchargez le fichier composer.lock sur le serveur distant.
  4. exécuter composer installsur un serveur distant (puis attendez que tout le processus soit terminé).
  5. TERMINÉ
Tito Panji
la source
-1

php -d memory_limit = 5G composer.phar mise à jour

Ali Özyıldırım
la source
Veuillez ajouter une explication à votre code afin que d'autres puissent en tirer des leçons
Nico Haase
-1

Résolu sur Laravel / Homestead (Vagrant Windows)

  1. Modifier Homestead.yamlet augmenter la mémoire de 2048 à 4096

  2. vagabonder

  3. vagabond ssh

  4. Installez Symfony avec cette ligne sur le dossier que vous choisissez (doit être sans fichiers)

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

Vous pouvez essayer de configurer preferred-installpour "dist"dans la configuration Composer.

Xedin Inconnu
la source
Cette question concerne l'installation d'un projet Laravel. Comment votre réponse y est-elle liée?
Nico Haase
Cette question concerne l'installation d'un package. Plus précisément, il s'agit de problèmes d'installation d'un package lié à la RAM. Pourquoi j'ai inclus des informations sur WP dans la réponse il y a 2 ans? Je ne sais pas. J'ai maintenant mis à jour la réponse, qui IMO est très pertinente maintenant.
XedinUnknown
-3

J'obtenais cette erreur dans un environnement Docker local. Je l'ai résolu en redémarrant simplement Docker.

Boucle
la source