ericbae
ericbae

Reputation: 9644

PHP Composer update "cannot allocate memory" error (using Laravel 4)

I just can't solve this one.

I'm on Linode 1G RAM basic plan. Trying to install a package via Composer and it's not letting me. My memory limit is set to "-1" on PHP.ini

Is there anything else I can do to get this installed?

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

Upvotes: 195

Views: 264976

Answers (28)

Tuychiev Toir
Tuychiev Toir

Reputation: 370

Use the --no-scripts flag when running composer update. This will prevent any scripts from running during the update, which can help if one of the scripts is using too much memory.

composer update --no-scripts

Use the --prefer-dist flag when running composer update. This will cause Composer to download a zip file of the package, rather than cloning the entire repository. This can help reduce the amount of memory needed during the update.

composer update --prefer-dist

Upvotes: -1

bluestar0505
bluestar0505

Reputation: 701

In my case, when Laravel ver 7,8 and composer ver 1, this error came out. I updated the version of Composer to 2 and it was resolved.

composer self-update

Or

composer self-update --2

Back to previous version:

composer self-update --rollback

Upvotes: 0

Evidence Ekanem
Evidence Ekanem

Reputation: 139

This worked for me:

According to composer's documentation, Composer 1 used much more memory and upgrading to the latest version will give you much better and faster results.

https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors

Upvotes: -1

Nicolas Facciolo
Nicolas Facciolo

Reputation: 316

I had the same problem using composer in wsl2.

Microsoft WSL team introduced a file called .wslconfig for tweaking WSL2 settings.

You basically have to create that file at %UserProfile%.wslconfig and set the settings below.

[wsl2]
memory=6GB  # Any size you feel like
swap=30GB
localhostForwarding=true

Restart your computer, and from now on, you won't have any problem with high memory consumption.

Hopefully, it helps!

Upvotes: 0

Umair Hamid
Umair Hamid

Reputation: 3557

As composer troubleshooting guide here This could be happening because the VPS runs out of memory and has no Swap space enabled.

free -m

To enable the swap you can use for example:

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

Or if above not worked then you can try create a swap file

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

Upvotes: 127

PHZ.fi-Pharazon
PHZ.fi-Pharazon

Reputation: 2093

In my case I tried everything that was listed above. I was using Laravel and Vagrant with 4GB of memory and a swap, with memory limit set to -1. I deleted the vendor/ and tried other PHP-versions. Finally, I managed it to work by running

vagrant halt
vagrant up

And then composer install worked again as usual.

Upvotes: 1

mani mann
mani mann

Reputation: 1

Please disable js bundling and increase memory. That should fix it. I fixed mine by disabling js bundling.

Thanks

Upvotes: -2

Rishi Ranjan
Rishi Ranjan

Reputation: 195

you can use the following to check your free (swap) memory

free -m

total used free shared buffers cached

Mem: 2048 357 1690 0 0 237
-/+ buffers/cache: 119 1928
Swap: 0 0 0

To enable the swap you can use for example:

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

Upvotes: 5

Aris
Aris

Reputation: 5055

I increased the PHP memory_limit from the default 128M to 512M and restart the server. That solved the problem.

Upvotes: 3

Manjunath A
Manjunath A

Reputation: 81

I tried by just deleting the vendor folder and composer.lock file and then i run the command composer clear-cache and then composer install. So it working without any error.

Upvotes: 7

SUNNETmedia
SUNNETmedia

Reputation: 431

composer update

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

> mmap() failed: [12] Cannot allocate memory

Update memory on Server and require '4G' Change 4GB Ram [try to change server type or add more ram]

2 Files We need to edit


on command

# cd /var/www/html
# nano .htaccess

and edit "memory_limit 756M” to 4G


Php ini on php 7.0

# cd ~
# php –-ini
# sudo nano /etc/php-7.0.ini

memory_limit = 128M to 4G

#AWS #AMAZONLINUX #MAGENTO2 #PHP7.0

Upvotes: -1

Tarik
Tarik

Reputation: 4546

Here are the steps to fix the problem: (instant fast SWAP file allocation method used)

Server SWAP Setup (Ubuntu 16.04 SWAP to Fix Out of Memory Errors)

Check if you have swap already, memory and disk size:

    sudo swapon -s
    free -m
    df -h

Make swap file: (change 1G to 4G if you want 4GB SWAP memory)

    sudo fallocate -l 1G /swapfile 

Check swap file:

    ls -lh /swapfile

Assign Swap File:

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

Check if swap OK, memory and disk size:

    sudo swapon -s
    free -m
    df -h

Attach Swap File on System Restart:

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

Adjust Swap File Settings:

    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

SWAP File Priority: (0-100% => 0: Don't put to swap, 100: Put on SWAP and free the RAM)

        vm.swappiness=10

Remove inode from cache: (100: system removes inode information from the cache too quickly)

        vm.vfs_cache_pressure = 50

Upvotes: 13

Amjith
Amjith

Reputation: 462

edit php.ini file and increase memory_limit value.

memory_limit=1G

will solve this issue.

Upvotes: -1

Ayo 'Lana
Ayo 'Lana

Reputation: 137

Try that:

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

/sbin/mkswap /var/swap.1

/sbin/swapon /var/swap.1

Upvotes: 7

Aditya Kresna Permana
Aditya Kresna Permana

Reputation: 12109

Looks like you runs out of swap memory, try this

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

as mentioned by @BlackBurn027 on comments below, this solution was described in here

Upvotes: 450

nixon1333
nixon1333

Reputation: 531

Make a swap and run composer command again. I hope it'll work for you.

 $ dd if=/dev/zero of=/swapfile bs=1024 count=512k
 $ mkswap /swapfile
 $ swapon /swapfile
 $ echo "/swapfile       none    swap    sw      0       0 " >> /etc/fstab
 $ echo 0 > /proc/sys/vm/swappiness
 $ chown root:root /swapfile
 $ chmod 0600 /swapfile

Upvotes: 1

Adonias Vasquez
Adonias Vasquez

Reputation: 1024

Try this:

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

This work for me on Centos 6

Upvotes: 2

oussaka
oussaka

Reputation: 960

I solved the same problem in Vagrant. I increased the value of memory_limit and delete composer cache: sudo rm -R ~/.composer and finally vagrant reload.

Upvotes: 2

Bastin Robin
Bastin Robin

Reputation: 938

I get into this situation most of the times so normally i used to follow the step of setting the swap memory.

But now i found a simple alternate trick which worked for me.

Run composer update --no-dev Other than composer update

Upvotes: 2

Titogelo
Titogelo

Reputation: 73

Sometimes by self-updating composer it solves the problem

php composer.phar self-update

Cheers

Upvotes: 3

Goran
Goran

Reputation: 748

Here is the workaround that I found that works for me every time:

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

Upvotes: 7

Yann叶
Yann叶

Reputation: 195

I had a same issue on vagrant. I fixed it by allcate more memory.

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

Upvotes: 10

Chris
Chris

Reputation: 637

I had a similar issue on the cheapest server (512MB RAM) hosted with DigitalOcean, and I was also running Jenkins CI on the same server. After I stopped the Jenkins instance the composer install command worked (well, to a point, it failed with the mcrypt extension missing besides already being installed!).

Maybe if you have another app running on the server, maybe its worth trying to stop it and re-running the command.

Upvotes: -1

insign
insign

Reputation: 5803

Easy, type this commands:

rm -rf vendor/

rm -rf composer.lock

php composer install --prefer-dist

Should work for low memory machines

Upvotes: 16

Ivan Proskuryakov
Ivan Proskuryakov

Reputation: 1732

have same problem with php composer.phar update on my 512mb hosting.

solved with php composer.phar install

Upvotes: 0

fl3x7
fl3x7

Reputation: 3803

A bit old but just in case someone new is looking for a solution, updating your PHP version can fix the issue.

Also you should be committing your composer.lock file and doing a composer install on a production environment which is less resource intensive.

More details here: https://github.com/composer/composer/issues/1898#issuecomment-23453850

Upvotes: 113

Abishek
Abishek

Reputation: 11701

I have faced the same issue. I am on a AWS Free Microinstance which has less memory. I always try one of the below options and it always works (Before all this please check if you have the latest version of composer installed)

sudo php -dmemory_limit=750M composer.phar update

or remove the contents of the vendor folder and try composer update.

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

The second option tries to update all the components, if there is no update, it picks up the package from the cache else picks up from the dist

Note: Please change the memory limit as per your choice.

or

Create a swap partition and try. Swap partition is the portion of the hard drive that linux uses as virtual memory when it runs out of physical memory. It's similar to the windows swap file only instead of using an actual file, linux uses a partition on the hard drive instead.

Hope this helps

Upvotes: 40

Makita
Makita

Reputation: 1812

This seems to be a recurring issue with 1GB and smaller server instances. Apart from trying to shutdown processes and tweak swap settings, you could install on a local machine and upload.

Upvotes: 4

Related Questions