191

我只是无法解决这个问题。

我正在使用 Linode 1G RAM 基本计划。试图通过 Composer 安装一个包,它不让我。我的内存限制在 PHP.ini 上设置为“-1”

我还能做些什么来安装它吗?

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
4

27 回答 27

441

看起来你的交换内存用完了,试试这个

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

正如@BlackBurn027 在下面的评论中提到的那样,这个解决方案在此处进行了描述

于 2014-07-09T08:11:45.280 回答
123

作为这里的作曲家故障排除指南 这可能是因为 VPS 内存不足并且没有启用交换空间。

free -m

要启用交换,您可以使用例如:

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

或者如果上述方法不起作用,那么您可以尝试创建一个交换文件

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
于 2017-12-29T15:27:23.533 回答
113

有点旧,但以防万一新人正在寻找解决方案,更新您的 PHP 版本可以解决问题。

此外,您应该提交您的 composer.lock 文件并在资源密集型较少的生产环境中安装 composer。

更多细节在这里: https ://github.com/composer/composer/issues/1898#issuecomment-23453850

于 2013-10-04T10:49:55.347 回答
41

我遇到了同样的问题。我在一个内存较少的 AWS 免费微实例上。我总是尝试以下选项之一,它总是有效(在所有这些之前,请检查您是否安装了最新版本的作曲家)

sudo php -dmemory_limit=750M composer.phar update

或删除供应商文件夹的内容并尝试作曲家更新。

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

第二个选项尝试更新所有组件,如果没有更新,它会从缓存中获取包,否则从 dist 中获取

注意:请根据您的选择更改内存限制。

或者

创建一个交换分区并尝试。交换分区是 linux 在物理内存用完时用作虚拟内存的硬盘部分。它类似于 windows 交换文件,只是不使用实际文件,linux 使用硬盘上的分区代替。

希望这可以帮助

于 2013-08-08T06:40:36.267 回答
15

很简单,输入以下命令:

rm -rf vendor/

rm -rf composer.lock

php composer install --prefer-dist

应该适用于低内存机器

于 2014-08-30T02:26:40.387 回答
13

以下是解决问题的步骤:(使用即时快速 SWAP 文件分配方法)

服务器 SWAP 设置(Ubuntu 16.04 SWAP 修复内存不足错误)

检查您是否已经有交换,内存和磁盘大小:

    sudo swapon -s
    free -m
    df -h

制作交换文件:(如果你想要 4GB SWAP 内存,请将 1G 更改为 4G)

    sudo fallocate -l 1G /swapfile 

检查交换文件:

    ls -lh /swapfile

分配交换文件:

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

检查交换是否正常,内存和磁盘大小:

    sudo swapon -s
    free -m
    df -h

在系统重新启动时附加交换文件:

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

调整交换文件设置:

    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 文件优先级:(0-100% => 0:不进行交换,100:进行 SWAP 并释放 RAM)

        vm.swappiness=10

从缓存中删除inode:(100:系统从缓存中删除inode信息过快)

        vm.vfs_cache_pressure = 50
于 2017-08-11T16:38:10.580 回答
10

我对 vagrant 也有同样的问题。我通过分配更多内存来修复它。

 config.vm.provider :virtualbox do |vb|
      vb.customize ["modifyvm", :id, "--memory", "1024"]
 end
于 2014-10-01T03:53:53.990 回答
7

这是我发现每次都对我有用的解决方法:

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
于 2014-10-01T05:28:51.703 回答
7

我尝试只删除供应商文件夹composer.lock文件,然后运行命令composer clear-cache,然后composer install. 所以它工作没有任何错误。

于 2016-02-08T07:36:54.530 回答
7

试试看:

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

/sbin/mkswap /var/swap.1

/sbin/swapon /var/swap.1
于 2018-01-27T14:54:01.163 回答
5

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
于 2019-09-10T09:23:17.953 回答
4

对于 1GB 和更小的服务器实例,这似乎是一个反复出现的问题。除了尝试关闭进程和调整交换设置之外,您还可以在本地计算机上安装并上传。

于 2013-08-08T01:46:08.700 回答
3

我将 PHPmemory_limit从默认的128M增加到512M并重新启动服务器。这解决了问题。

于 2015-09-17T04:38:00.867 回答
3

有时通过自我更新作曲家可以解决问题

php composer.phar self-update

干杯

于 2015-09-17T18:47:32.087 回答
2

我大多数时候都会遇到这种情况,所以通常我习惯于按照设置交换内存的步骤进行操作。

但现在我发现了一个对我有用的简单替代技巧。

运行 composer update --no-dev以外composer update

于 2015-12-30T03:57:25.010 回答
2

我在 Vagrant 中解决了同样的问题。我增加了memory_limit的值 并删除了作曲家缓存:sudo rm -R ~/.composer 最后是 vagrant reload。

于 2016-05-15T14:47:13.237 回答
2

试试这个:

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

在 Centos 6 上为我工作

于 2016-06-11T17:33:19.810 回答
1

进行交换并再次运行 composer 命令。我希望它对你有用。

 $ 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
于 2017-04-23T08:49:06.473 回答
1

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.

于 2020-02-24T21:14:35.837 回答
0

我的 512mb 主机上的 php composer.phar 更新有同样的问题。

php composer.phar install解决

于 2014-03-19T00:01:46.343 回答
0

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!

于 2021-02-19T14:23:05.597 回答
-1

我在DigitalOcean托管的最便宜的服务器(512MB RAM)上遇到了类似的问题,我也在同一台服务器上运行 Jenkins CI。在我停止 Jenkins 实例之后,composer install 命令起作用了(好吧,在某种程度上,它失败了,除了已经安装之外还缺少 mcrypt 扩展!)。

也许如果您在服务器上运行另一个应用程序,也许值得尝试停止它并重新运行该命令。

于 2014-09-28T21:28:30.827 回答
-1

编辑 php.ini 文件并增加 memory_limit 值。

memory_limit=1G

将解决这个问题。

于 2018-07-25T10:54:30.897 回答
-1
于 2019-03-13T04:27:45.550 回答
-1

I use it for 500MB RAM and it works for me.

php -d memory_limit=-1 /usr/local/bin/composer install
于 2020-07-26T19:23:40.983 回答
-1

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

于 2021-11-12T21:40:10.947 回答
-2

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

Thanks

于 2019-12-01T18:54:10.630 回答