Composer Update failed -- out of memory

PhpOut of-MemoryComposer Php

Php Problem Overview


I got this error when running composer.phar update on my VM:

>PHP Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 144115188075867549 bytes) in phar:///bin/composer.phar/src/Composer/Util/RemoteFilesystem.php on line 179

The composer.json, if needed:

{
        "description" : "The CodeIgniter framework",
        "name" : "codeigniter/framework",
        "license": "MIT",
        "require": {
                "php": ">=5.2.4",
                "videlalvaro/php-amqplib": "2.5.*"
        },
        "require-dev": {
                "mikey179/vfsStream": "1.1.*",
                "videlalvaro/php-amqplib": "2.5.*"
        }
}

The VM just recently recovered from a bad disk sector problem, and the guy running the VM said that the VM has been moved to a new disk. There are only Java, PHP, httpd, postgre, rabbitmq and the website itself in my VM, and it already ran perfectly for about 4 months before this happened. I'm using PHP 5.6.11. Can anyone help please?

Php Solutions


Solution 1 - Php

Check the Composer's troubleshooting wiki, especially the memory limit errors section.

For instance, by running the composer like this:

php -d memory_limit=-1 `which composer` update

I get no error anymore. So it is probably an insufficient memory issue that can be solved inline, without altering your default PHP configuration.

What the command above does is that it sets the PHP CLI memory limit to "unlimited" (ie. -1) and then it runs the inline composer update command.

Please note that instead of `which composer` you should probably use the real path of your composer.phar PHP script. The which composer written inline (like in my example above) will be inline solved to your composer.phar full path (you may use whatever form you like).

> Note: in case both the physical and virtual memory is exceeded the above solution might fail as well. If that is the case then the obvious solution would be to increase your system's virtual memory then try again.

Solution 2 - Php

The only thing that solve my problem was doing this:

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

REF: COMPOSER TROUBLESHOOTING

Solution 3 - Php

From my experience, memory errors from composer usually means it is spending too much memory looking for the right combinations of packages to install, especially the version constraints are not specific enough. For example, ^5.2.4 matches 5.3 to 5.3.29, 5.4 to 5.4.45, etc. For each specific version and permutation, composer has to get the package's dependencies to check if all the constraints are met. This is usually when the memory consumption gets huge.

Once the versions have been figured out, the installation phase uses much less memory. The resolved versions for each package are also stored in a composer.lock file so that the specific permutation installed can be replicated in other environments. And this is the potential solution to your issue: run composer update in your dev machine (which should have enough memory), deploy the updated composer.lock, and run composer install on the server.

Composer install will always reference the existing composer.lock for the versions to install for each package, and thus should seldom run into memory issues.

For a reference on how to express version constraints in composer.json, check out https://getcomposer.org/doc/articles/versions.md

Solution 4 - Php

Rather than permanently setting your memory limit to an increased number (or unlimited), I use this;

# Running an update
COMPOSER_MEMORY_LIMIT=-1 composer update
COMPOSER_MEMORY_LIMIT=-1 composer require PACKAGE/NAME

That temporarily set's the composer memory limit env variable to unlimited.

Solution 5 - Php

Solved by deleting the whole vendor folder, and then doing the composer update again, and it works... somehow. I don't even understand :v

Solution 6 - Php

Katiak's answer worked but I had to modify it. You will need 4 GB of free space for this to work on a Linux machine. Make sure you sudo the commands if you're not root:

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

Composer takes alot of memory for certain repositories like Drupal.

Essentially, this creates 4 GB of Swap memory from the hard drive which the CPU can use to complete the composer command.

The original solution seems to have come from this Github thread but I could be mistaken:

https://github.com/composer/composer/issues/7348#issuecomment-414178276

To load the swap at boot add the following line in /etc/fstab

/var/swap.1 none swap sw 0 0

You may want to backup your fstab file just to be on the safe side.

To reclaim the swap space do this:

sudo swapoff -v /var/swap.1
sudo rm /var/swap.1

If you get a message like this after turning on the swap...

swapon: /var/swap.1: insecure permissions 0644, 0600 suggested.

...change the permission if appropriate

sudo chmod 600 /var/swap.1

Solution 7 - Php

#Memory limit errors

Composer may sometimes fail on some commands with this message:

> PHP Fatal error: Allowed memory size of XXXXXX bytes exhausted <...> > > >Or in my case : > > >Fatal error: Out of memory (allocated 1116733440) (tried to allocate > >134217728 bytes) in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/DependencyResolver/Pool.php > on line 339

In this case, the PHP memory_limit should be increased.

> Note: Composer internally increases the memory_limit to > 1.5G.

To get the current memory_limit value, run:

php -r "echo ini_get('memory_limit').PHP_EOL;"

Try increasing the limit in your php.ini file (ex. /etc/php5/cli/php.ini for Debian-like systems):

; Use -1 for unlimited or define an explicit value like 2G
memory_limit = -1

Composer also respects a memory limit defined by the COMPOSER_MEMORY_LIMIT environment variable:

COMPOSER_MEMORY_LIMIT=-1 composer.phar <...>

Or, you can increase the limit with a command-line argument:

php -d memory_limit=-1 composer.phar <...>

This issue can also happen on cPanel instances, when the shell fork bomb protection is activated. For more information, see the documentation of the fork bomb feature on the cPanel site.


To get loaded php.ini files location try:

php --ini

Source : (Composer docs)

Solution 8 - Php

It's a memory problem, not a storage issue. You are reaching your PHP memory limit.

Edit /etc/php.ini and increase the memory limit ( memory_limit = 128M replace with memory_limit = 256M )

I would suggest you look for the reason composer is using so much memory , and find ways to cut your PHP memory usage :

  1. Upgrade to PHP56 if you haven't already
  2. Install Zend Opcache ( shares PHP memory between different instances )
  3. Uninstall any and all unused PECL extensions

This is the issue you are having : https://github.com/composer/composer/issues/1898

Solution 9 - Php

Try this one

COMPOSER_MEMORY_LIMIT=-1 composer require [package name]

Solution 10 - Php

I'm on a Windows machine and I tried all of the answers from this question, but none of them worked. For me, it FINALLY worked after I ran composer using the 64-bit version of PHP.

To run composer using a local copy of PHP x64 you can do the following:

  1. Download the zip file from here (I used the VC15 x64 Thread Safe version): https://windows.php.net/download
  2. Unzip the file
  3. Copy php.ini-development and rename to php.ini
  4. Uncomment the extension_dir = "ext" line and any other php extensions you will need (such as extension=gd2 or extension=openssl). If any other PHP extensions are needed for the update then it will tell you while running the command.

Working command:

"C:\path\to\php-7.2.23-Win32-VC15-x64\php.exe" -d memory_limit=-1 "C:/path/to/composer.phar" update

Source: https://ourcodeworld.com/articles/read/816/how-to-solve-composer-install-update-error-virtualalloc-failed-0x00000008

Solution 11 - Php

The solution that works both on local environment but also in a container (e.g. in a build stage of a pipeline) where composer might be installed in tricky way, is

COMPOSER_MEMORY_LIMIT=-1 composer install

Solution 12 - Php

When using the software Laragon on Windows, the following line helped me requiring a new package without getting the memory error:

php -d memory_limit=-1 "C:\laragon\bin\composer\composer.phar" require <insert package author here>/<insert package name here>

Solution 13 - Php

php -d memory_limit=-1 /usr/local/bin/composer install

This command work for me.

Solution 14 - Php

In my case, I was facing this error because of running composer install inside vagrant box. Running it inside my host machine didn't cause the issue.

Solution 15 - Php

Nothing worked for me except putting memory_limit = -1 in php.ini file.

Solution 16 - Php

I set memory_limit=-1 in my php.ini file but didnt work but i went ahead to execute commands from link below and then run composer install and worked perfectly

https://tecadmin.net/enable-swap-on-ubuntu/

Solution 17 - Php

It worked for me!

Download the zip 64-bit version of your PHP from this link: https://windows.php.net/download/

enter image description here

Now extract it to C:\PHP-74\ and rename the php.ini-development to php.ini

php.ini

Now open this php.ini and uncomment the following by removing ; (semicolon).

extension_dir = "ext"
extension=bz2
extension=curl
extension=fileinfo
extension=gd2
extension=gettext
extension=mbstring
extension=exif      ; Must be after mbstring as it depends on it
extension=mysqli
extension=openssl
extension=pdo_sqlite

In my scenario these extensions are required you can compare your old php.ini file of xampp or wamp resolve this one. Now save the file and run the following command.

"C:\PHP-74\php.exe" -d memory_limit=-1 "C:\ProgramData\ComposerSetup\bin\composer.phar" update

Solution 18 - Php

Update composer to v2.

composer self-update --2

Remove vendor path and composer.lock file.

Set in php.ini memory_limit=-1.

Run

composer install

Solution 19 - Php

This one helped me, with showing memory usage:

php -d memory_limit=-1 /usr/local/bin/composer update --verbose --profile

Solution 20 - Php

You may also get resolved by just removing vendor directory and re-execute composer install command.

Solution 21 - Php

Try increase the memory_limit value in your active php.ini file.

; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 512M

For example.

Solution 22 - Php

this solution will fix your problem.

Update your php.ini file then restart Apache or your server example: memory_limit=128M to memory_limit=1128M

It's work on me.

Solution 23 - Php

php -d memory_limit=-1 /usr/local/bin/composer update --no-scripts

memory_limit=-1 is for unlimited memory for this process when you add php before the composer for unlimited memory then you have to give composer complete path where its installed on server (for ubntu) its /usr/local/bin/composer Reamining part is just compoer commands update/install

Solution 24 - Php

Increasing the memory_limit value on my php.ini did not solve my problem. What I did was:

  1. Delete composer.lock,
  2. run composer update,

And that did the trick!

Solution 25 - Php

If you are still facing issues after updating your memory limit then the best thing to try is to run:

composer update --lock

This will update your lock file so that composer can run from it if you have changed your composer.json file.

You can now optimally run:

composer update

or

composer install

Solution 26 - Php

If on Windows, using XAMP, I recommend to Update your Composer version to latest. Uninstall, download latest - https://getcomposer.org/download/ and install.

Could also try update PHP version to latest.

Solution 27 - Php

If you are running into composer memory problems, now your best option is probably to use composer v2, if you can.

Composer v2 has many performance improvements and as a result, it takes much less memory.

I was always having to use COMPOSER_MEMORY_LIMIT=-1 composer update but after the v2 update, I no longer need to use this.

Check out the release announcement https://blog.packagist.com/composer-2-0-is-now-available/ or download the latest version https://getcomposer.org/download/

Solution 28 - Php

sudo php -d memory_limit=-1 bin/magento setup:di:compile

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAldibeView Question on Stackoverflow
Solution 1 - PhpEugen MihailescuView Answer on Stackoverflow
Solution 2 - PhpkatiakView Answer on Stackoverflow
Solution 3 - Phpsquall3dView Answer on Stackoverflow
Solution 4 - PhpajtrichardsView Answer on Stackoverflow
Solution 5 - PhpAldibeView Answer on Stackoverflow
Solution 6 - PhppmaguniaView Answer on Stackoverflow
Solution 7 - PhpchebabyView Answer on Stackoverflow
Solution 8 - PhpDannyZBView Answer on Stackoverflow
Solution 9 - PhpMahbubur Rahman MishalView Answer on Stackoverflow
Solution 10 - PhpKevenView Answer on Stackoverflow
Solution 11 - PhpAlex ChristodoulouView Answer on Stackoverflow
Solution 12 - PhpDenBrownView Answer on Stackoverflow
Solution 13 - PhpNiyanta BhayaniView Answer on Stackoverflow
Solution 14 - PhpR SunView Answer on Stackoverflow
Solution 15 - PhpUmairView Answer on Stackoverflow
Solution 16 - PhpSilvester WanjiruView Answer on Stackoverflow
Solution 17 - PhpAhsan NajamView Answer on Stackoverflow
Solution 18 - PhpДенис ЧорнийView Answer on Stackoverflow
Solution 19 - PhpJokeriusView Answer on Stackoverflow
Solution 20 - PhpShadmanView Answer on Stackoverflow
Solution 21 - PhpPiggyMacPigPigView Answer on Stackoverflow
Solution 22 - PhpVinView Answer on Stackoverflow
Solution 23 - PhpHassan Ali ShahzadView Answer on Stackoverflow
Solution 24 - Phpcharles_fontanosView Answer on Stackoverflow
Solution 25 - PhpRosue WalfordView Answer on Stackoverflow
Solution 26 - PhpAndrewView Answer on Stackoverflow
Solution 27 - PhpMr U.View Answer on Stackoverflow
Solution 28 - PhpGhisoi IoanView Answer on Stackoverflow