PHP Composer更新"无法分配内存"错误(使用Laravel 4)

eri*_*bae 123 php laravel composer-php laravel-4

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

我正在使用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
Run Code Online (Sandbox Code Playgroud)

Adi*_*ana 318

看起来你的交换内存耗尽,试试这个

/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
/sbin/mkswap /var/swap.1
/sbin/swapon /var/swap.1
Run Code Online (Sandbox Code Playgroud)

正如@ BlackBurn027在下面的评论中提到的,这个解决方案在这里描述

  • 你先生,是一个天才 - 它不是一个PHP问题,删除文件将无济于事.我必须在我的VPS上按照你的指示(使用sudo).这是VPS用户唯一有用的答案. (19认同)
  • https://getcomposer.org/doc/articles/troubleshooting.md#proc-open-fork-failed-errors来源提到 (4认同)
  • 有时 1024 是不够的...使用 2048 代替 (2认同)
  • 我将永远在你的部门,如果你来过伊朗,请告诉我,我会邀请你共进午餐(顺便说一句,不要来伊朗,这很危险) (2认同)

fl3*_*3x7 77

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

此外,您应该提交您的composer.lock文件,并在资源密集程度较低的生产环境中进行作曲家安装.

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

  • 辉煌!那很有效.我没有升级我的PHP,但提交composer.lock文件并正确更新所有东西.谢谢. (11认同)
  • 聚会迟到了,但我只是关闭了 Apache 和 MySQL。我使用 512MB RAM VPS 是有原因的,不想花钱。 (7认同)
  • 更新PHP不是一个解决方案.我有7.0.21,仍然会收到此错误. (7认同)
  • 它的工作原理只是使用"composer instal",谢谢你. (7认同)

Uma*_*mid 46

作为作曲家故障排除指南这里 可能会发生这种情况,因为VPS内存不足并且没有启用交换空间.

free -m
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)


Abi*_*hek 36

我遇到了同样的问题.我在AWS Free Microinstance上,内存较少.我总是尝试以下选项之一,它始终有效(在此之前请检查您是否安装了最新版本的composer)

sudo php -dmemory_limit=750M composer.phar update
Run Code Online (Sandbox Code Playgroud)

或删除vendor文件夹的内容并尝试编辑器更新.

sudo rm -rf vendor
sudo php -dmemory_limit=750M composer.phar update --no-scripts --prefer-dist
sudo php artisan --dump-autoload
Run Code Online (Sandbox Code Playgroud)

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

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

要么

创建一个交换分区并尝试.交换分区是Linux在物理内存耗尽时用作虚拟内存的硬盘驱动器的一部分.它与Windows交换文件类似,而不是使用实际文件,Linux使用硬盘驱动器上的分区.

希望这可以帮助

  • 即使在250M我的Digital Ocean帐户上也有同样的问题,我还必须先停止Apache和MySQL才能运行它 (2认同)

jei*_*ias 13

尝试

它基本上是提高交换内存

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

  • 请在您的答案中添加一些解释,以便其他人可以从中学习。 (6认同)

ins*_*ign 12

轻松,输入以下命令:

rm -rf vendor/

rm -rf composer.lock

php composer install --prefer-dist

应该适用于低内存机器


Yan*_*nn叶 10

我对流浪者有同样的问题.我通过更多的记忆来修复它.

 config.vm.provider :virtualbox do |vb|
      vb.customize ["modifyvm", :id, "--memory", "1024"]
 end
Run Code Online (Sandbox Code Playgroud)


Tar*_*rik 8

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

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

检查是否已交换空间,内存和磁盘大小:

    sudo swapon -s
    free -m
    df -h
Run Code Online (Sandbox Code Playgroud)

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

    sudo fallocate -l 1G /swapfile 
Run Code Online (Sandbox Code Playgroud)

检查交换文件:

    ls -lh /swapfile
Run Code Online (Sandbox Code Playgroud)

分配交换文件:

    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile
Run Code Online (Sandbox Code Playgroud)

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

    sudo swapon -s
    free -m
    df -h
Run Code Online (Sandbox Code Playgroud)

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

    sudo nano /etc/fstab
        /swapfile   none    swap    sw    0   0
Run Code Online (Sandbox Code Playgroud)

调整交换文件设置:

    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
Run Code Online (Sandbox Code Playgroud)

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

        vm.swappiness=10
Run Code Online (Sandbox Code Playgroud)

从缓存中删除索引节点:(100:系统太快地从缓存中删除索引节点信息)

        vm.vfs_cache_pressure = 50
Run Code Online (Sandbox Code Playgroud)


小智 8

试试看:

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

/sbin/mkswap /var/swap.1

/sbin/swapon /var/swap.1
Run Code Online (Sandbox Code Playgroud)

  • 请在您的答案中添加一些解释,以便其他人可以从中学习 - 特别是:与使用相同方法的其他答案相比,您改变了什么?有必要重复他们的答案吗? (2认同)

小智 7

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


Gor*_*ran 6

以下是我发现每次都适合我的解决方法:

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
Run Code Online (Sandbox Code Playgroud)

  • 哇,发布命令而不解释他们做什么可能是危险的!虽然我可以明确地说它可以在大多数系统上运行.基本上你正在创建分配交换空间,以便HD可以用作RAM.以下是有关如何解释每个命令的综合指南:https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04 (3认同)

小智 6

您可以使用以下方法检查您的空闲(交换)内存

free -m

total used free shared buffers cached

Mem: 2048 357 1690 0 0 237
-/+ buffers/cache: 119 1928
Swap: 0 0 0
Run Code Online (Sandbox Code Playgroud)

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

/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
/sbin/mkswap /var/swap.1
/sbin/swapon /var/swap.1
Run Code Online (Sandbox Code Playgroud)