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

13voto

Tarik Points 2174

Voici les étapes à suivre pour résoudre le problème : (méthode d'allocation instantanée et rapide des fichiers SWAP utilisée)

Configuration du SWAP serveur (SWAP Ubuntu 16.04 pour corriger les erreurs de mémoire)

Vérifiez si vous disposez déjà de swap, de mémoire et de taille de disque :

    sudo swapon -s
    free -m
    df -h

Créez le fichier swap : (changez 1G en 4G si vous voulez 4GB de mémoire SWAP)

    sudo fallocate -l 1G /swapfile 

Vérifiez le fichier d'échange :

    ls -lh /swapfile

Attribuer le fichier d'échange :

    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile

Vérifiez si le swap est OK, la mémoire et la taille du disque :

    sudo swapon -s
    free -m
    df -h

Attacher le fichier de swap au redémarrage du système :

    sudo nano /etc/fstab
        /swapfile   none    swap    sw    0   0

Ajustez les paramètres du fichier de permutation :

    cat /proc/sys/vm/swappiness
    cat /proc/sys/vm/vfs_cache_pressure

    sudo sysctl vm.swappiness=10
    sudo sysctl vm.vfs_cache_pressure=50

    sudo nano /etc/sysctl.conf

Priorité du fichier SWAP : (0-100% => 0 : Ne pas mettre en swap, 100 : Mettre en SWAP et libérer la RAM)

        vm.swappiness=10

Retirer l'inode du cache : (100 : le système retire l'information de l'inode du cache trop rapidement)

        vm.vfs_cache_pressure = 50

10voto

Yann叶 Points 1

J'ai eu le même problème sur vagrant. Je l'ai résolu en allouant plus de mémoire.

 config.vm.provider :virtualbox do |vb|
      vb.customize ["modifyvm", :id, "--memory", "1024"]
 end

7voto

Goran Points 5

Voici la solution de rechange que j'ai trouvée et qui fonctionne à chaque fois :

df -h 
dd if=/dev/zero of=/swapfile bs=1M count=1024
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
mkswap /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo 'echo "/swapfile  none  swap  defaults  0  0" >> /etc/fstab' | sudo sh

free -m

confirm u see your swap there:
total used free shared buffers cached
Mem: 494 335 158 0 19 62
-/+ buffers/cache: 254 240
Swap: 1023 3 1020

watch free -m

7voto

Manjunath A Points 81

J'ai essayé en supprimant simplement le dossier du vendeur y composer.lock et ensuite je lance la commande composer clear-cache et ensuite composer install . Il fonctionne donc sans aucune erreur.

7voto

Ayo 'Lana Points 135

Essayez ça :

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

/sbin/mkswap /var/swap.1

/sbin/swapon /var/swap.1

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