Fix composer memory limit sur Vagrant VM pour Homestead, composer v1 et v2.

PHP Fatal error: Allowed memory size of XXXXXX bytes exhausted. C'est LE message sur composer qui mène clairement à une perte de plusieurs heures dans une journée de développement. Comment résoudre ? Découvrez le SWAP.

Aujourd’hui une petite astuce que j’ai souvent eu l’habitude de résoudre sur des environnements de développement basé sur Vagrant Box en localhost, que ce soit dans le développement de projets Laravel ou Symfony moyens – gros.

L’article est aussi disponible en anglais sur mon blog Medium : How to fix Composer Memory Limit on Vagrant ?.

Allowed memory size : Impossible de lancer la commande « composer install » en local.

Lorsque vous voulez réaliser une commande via Composer, par exemple un « composer install« , vous pouvez lancer cette commande depuis un terminal de votre ordinateur ou de votre machine virtuelle Vagrant.

Dans le 1er cas, si vous lancez cette commande depuis un shell de votre ordinateur Windows, il se peut que que composer plante. En effet, Composer est dédié à un environnement Linux.

Vous décidez donc de passer par un terminal Git Bash, qui permet d’utiliser les commandes bash sous Windows, ou directement depuis la box Vagrant qui est, elle, sous Linux.

Cependant vous n’arrivez toujours pas à vos fins, et vous ne pouvez toujours pas lancer de quelconques commandes composer telles que :

  • composer install
  • composer require
  • composer update

PHP Fatal error: Allowed memory size of XXXXXX bytes exhausted.

C’est LE message sur composer que tout le monde redoute et qui mène clairement à une perte de plusieurs heures dans une journée de développement.

Il s’agit d’un problème d’utilisation de mémoire lié à composer et qui survient n’importe quand. En effet, vous pouvez très bien avoir un package.json de 5 ou 25 librairies, l’erreur se produit au hasard, en fonction de votre machine, des ressources allouées et de surtout de la mémoire que prend composer pour télécharger et installer les dépendances.

Vous pouvez aussi très bien rencontrer un « Allowed Memory Size » sur un simple « composer require », alors que la semaine d’avant tout votre environnement marchait nickel.

J’ai donc passé quelques temps à trouver des solutions, et je suis tombé, en fouillant sur Github, que je n’étais pas du tout le seul.

Résoudre l’erreur allowed memory size lors d’un composer install, require, update.

Si vous avez déjà passé de longues minutes à chercher une solution à ce problème, alors ce petit bout de code suivant est sans doute pour vous. Il s’agit de créer une partition de la RAM sur la machine virtuelle pour allouer de la mémoire supplémentaire. Cette technique est appelée “SWAP” :

Qu’est ce que le swap sur Linux ?

Swap est un espace sur un disque utilisé lorsque la quantité de mémoire RAM physique est pleine. Lorsqu’un système Linux manque de RAM, les pages inactives sont déplacées de la RAM vers l’espace de swap.

L’espace d’échange peut prendre la forme d’une partition d’échange dédiée ou d’un fichier d’échange.

Corriger le bug Allowed memory size de Composer

On y va ! Dans votre machine ou sur votre serveur tapez dans l’ordre ces commandes :

$ /bin/dd if=/dev/zero of=/var/swap.1 bs=4096k count=1024
Créer un fichier d’une taille de 4Mo contenant uniquement des caractères NULL et nommé « /var/swap.1»
$ chmod 600 /var/swap.1
On assigne les droits du dossier « /var/swap.1» à 600 pour qu’il ne soit pas visible
$ /sbin/mkswap /var/swap.1
Formater cette zone à l’aide de la commande mkswap
$ /sbin/swapon /var/swap.1
Activer la zone de swap à l’aide de la commande swapon
$ COMPOSER_MEMORY_LIMIT=-1 composer require librairie/yours
COMPOSER_MEMORY_LIMIT=-1 est optionnel, ensuite vous n’avez plus qu’à composer !

Le problème se produit-il tout le temps avec Composer et Vagrant ?

Hé bien non pas forcément. L’erreur semble être spécifique à des versions de Composer < 2, car je n’ai pas eu le soucis sur de nouveaux environnements de développement utilisant Composer 2.

Néanmoins si vous rencontrez cette erreur aussi sur Composer 2, la solution reste toujours celle-ci, si vous ne souhaitez pas toucher à vos librairies du packages.json, en attendant une meilleure optimisation.

Cela dépend aussi de votre machine, car lorsque vous installez une machine virtuelle Homestead (ou Vagrant directement) vous avez possibilité d’allouer un nombre de mémoire maximum et un nombre de processeurs à utiliser.

Forcément, avec un ordinateur plus performant, votre machine virtuelle pourra aussi consommer plus de ressources, et donc le problème pourra être résolu.

Cet article vous a plu ? Partager-le !

Newsletter : restons en contact !

Inscrivez-vous ci-dessous pour vous abonner à ma newsletter.
Politique de confidentialité.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.