192 votes

Erreur "cannot allocate memory" dans la mise à jour de PHP Composer (avec Laravel 4)

Je n'arrive pas à résoudre ce problème.

Je suis sur Linode 1G RAM plan de base. J'essaie d'installer un paquet via Composer et il ne me laisse pas faire. Ma limite de mémoire est fixée à "-1" dans PHP.ini.

Y a-t-il autre chose que je puisse faire pour que cela soit installé ?

Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing thujohn/rss (dev-master df80a7d)
    Downloading: 100%         
PHP Fatal error:  Uncaught exception 'ErrorException' with message 'proc_open(): fork failed - Cannot allocate memory' in phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php:975
Stack trace:
#0 [internal function]: Composer\Util\ErrorHandler::handle(2, 'proc_open(): fo...', 'phar:///usr/loc...', 975, Array)
#1 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(975): proc_open('stty -a | grep ...', Array, NULL, NULL, NULL, Array)
#2 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(853): Symfony\Component\Console\Application->getSttyColumns()
#3 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(818): Symfony\Component\Console\Application->getTerminalDimensions()
#4 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(752): Symfony\Component\Console\Application->getTerminalWidth()
#5 phar:///usr/local/bin/com in phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php on line 975

Fatal error: Uncaught exception 'ErrorException' with message 'proc_open(): fork failed - Cannot allocate memory' in phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php:975
Stack trace:
#0 [internal function]: Composer\Util\ErrorHandler::handle(2, 'proc_open(): fo...', 'phar:///usr/loc...', 975, Array)
#1 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(975): proc_open('stty -a | grep ...', Array, NULL, NULL, NULL, Array)
#2 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(853): Symfony\Component\Console\Application->getSttyColumns()
#3 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(818): Symfony\Component\Console\Application->getTerminalDimensions()
#4 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(752): Symfony\Component\Console\Application->getTerminalWidth()
#5 phar:///usr/local/bin/com in phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php on line 975

445voto

On dirait que vous n'avez plus de mémoire d'échange, essaie ceci

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

comme mentionné par @BlackBurn027 dans les commentaires ci-dessous, cette solution a été décrite dans ici

124voto

Umair Hamid Points 63

Comme guide de dépannage des compositeurs ici Cela peut être dû au fait que le VPS manque de mémoire et que l'espace swap n'est pas activé.

free -m

Pour activer le swap, vous pouvez utiliser par exemple :

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

Si cela ne fonctionne pas, vous pouvez essayer de créer un fichier d'échange.

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

113voto

fl3x7 Points 787

C'est un peu vieux, mais juste au cas où quelqu'un de nouveau chercherait une solution, la mise à jour de votre version de PHP peut résoudre le problème.

Vous devriez également valider votre fichier composer.lock et procéder à l'installation de composer sur un environnement de production, moins gourmand en ressources.

Plus de détails ici : https://github.com/composer/composer/issues/1898#issuecomment-23453850

41voto

J'ai rencontré le même problème. Je suis sur une micro-instance AWS Free qui a moins de mémoire. J'essaie toujours l'une des options suivantes et cela fonctionne toujours (Avant tout cela, vérifiez si vous avez installé la dernière version de Composer).

sudo php -dmemory_limit=750M composer.phar update

ou supprimez le contenu du dossier du vendeur et essayez la mise à jour du compositeur.

sudo rm -rf vendor
sudo php -dmemory_limit=750M composer.phar update --no-scripts --prefer-dist
sudo php artisan --dump-autoload

La seconde option tente de mettre à jour tous les composants, s'il n'y a pas de mise à jour, elle récupère le paquet dans le cache ou dans le dist.

Note : Veuillez modifier la limite de mémoire selon votre choix.

o

Créer un partition d'échange et essayez. La partition Swap est la partie du disque dur que linux utilise comme mémoire virtuelle lorsqu'il manque de mémoire physique. C'est similaire au fichier swap de Windows, mais au lieu d'utiliser un fichier réel, linux utilise une partition sur le disque dur.

J'espère que cela vous aidera

15voto

insign Points 156

Facile, tapez cette commande :

rm -rf vendor/

rm -rf composer.lock

php composer install --prefer-dist

Devrait fonctionner pour les machines à faible mémoire

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X