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

时间:2013-08-08 00:58:48

标签: php laravel laravel-4 composer-php

我无法解决这个问题。

我正在使用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

28 个答案:

答案 0 :(得分:261)

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

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

如@ BlackBurn027在下面的评论中提到的,此解决方案在here

中有所描述

答案 1 :(得分:64)

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

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

此处有更多详情: https://github.com/composer/composer/issues/1898#issuecomment-23453850

答案 2 :(得分:34)

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

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交换文件类似,而不是使用实际文件,而是使用硬盘驱动器上的分区。

希望这有帮助

答案 3 :(得分:22)

作为作曲家故障排除指南here 这可能会发生,因为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

答案 4 :(得分:12)

简单,输入以下命令:

rm -rf vendor/

rm -rf composer.lock

php composer install --prefer-dist

适用于低内存机器

答案 5 :(得分:10)

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

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

答案 6 :(得分:6)

试试:

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

/sbin/mkswap /var/swap.1

/sbin/swapon /var/swap.1

答案 7 :(得分:5)

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

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

答案 8 :(得分:4)

试试这个:

/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上的这项工作

答案 9 :(得分:4)

以下是解决问题的步骤: (使用即时快速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

答案 10 :(得分:4)

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

答案 11 :(得分:3)

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

library(plyr)

lst = list(matrix(1:15, ncol=5), matrix(10:24, ncol=5))

alply(array(unlist(lst), c(2,3,5)),3)

#$`1`
#     [,1] [,2] [,3]
#[1,]    1    3    5
#[2,]    2    4    6

#$`2`
#     [,1] [,2] [,3]
#[1,]    7    9   11
#[2,]    8   10   12

#$`3`
#     [,1] [,2] [,3]
#[1,]   13   15   11
#[2,]   14   10   12

#$`4`
#     [,1] [,2] [,3]
#[1,]   13   15   17
#[2,]   14   16   18

#$`5`
#     [,1] [,2] [,3]
#[1,]   19   21   23
#[2,]   20   22   24

干杯

答案 12 :(得分:3)

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

free -m

total used free shared buffers cached

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

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

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

答案 13 :(得分:2)

我在Vagrant中解决了同样的问题。 我增加了 memory_limit 的值 并删除co​​mposer cache: sudo rm -R~ / .composer 最后是流浪汉重装。

答案 14 :(得分:2)

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

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

运行     composer update --no-dev

以外的composer update

答案 15 :(得分:1)

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

答案 16 :(得分:1)

就我而言,我尝试了上面列出的所有内容。我使用的是Laravel和Vagrant,具有4GB的内存和一个交换空间,内存限制设置为-1。我删除了vendor /,并尝试了其他PHP版本。最后,我通过运行对其进行了管理

vagrant halt
vagrant up

然后重新安装作曲家。

答案 17 :(得分:1)

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

php composer.phar install

解决

答案 18 :(得分:0)

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

  

memory_limit = 1G

将解决此问题。

答案 19 :(得分:0)

我在 wsl2 中使用 Composer 时遇到了同样的问题。

Microsoft WSL 团队引入了一个名为 .wslconfig 的文件,用于调整 WSL2 设置。

您基本上必须在 %UserProfile%.wslconfig 中创建该文件并设置以下设置。

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

重新启动您的计算机,从现在开始,您将不会遇到高内存消耗的问题。

希望有帮助!

答案 20 :(得分:0)

我将其用于500MB RAM,并且对我有用。

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

答案 21 :(得分:0)

请禁用js捆绑并增加内存。那应该解决它。我通过禁用js绑定来修复我的问题。

谢谢

答案 22 :(得分:0)

尝试

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

答案 23 :(得分:0)

composer update

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

> mmap()失败:[12]无法分配内存

更新服务器上的内存并要求'4G'更改4GB RAM [尝试更改服务器类型或添加更多RAM]

2个文件,我们需要编辑


根据命令

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

并将"memory_limit 756M”修改为4G


php 7.0上的php ini

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

memory_limit = 128M至4G

#AWS #AMAZONLINUX#MAGENTO2#PHP7.0

答案 24 :(得分:0)

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

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

答案 25 :(得分:0)

我将PHP memory_limit从默认 128M 增加到 512M ,然后重新启动服务器。这解决了这个问题。

答案 26 :(得分:0)

进行交换并再次运行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

答案 27 :(得分:-1)

我过去在具有 1GB RAM 的服务器上经常看到此错误。服务器上的实际内存已耗尽。

过去的解决方法是添加一个 SWAP 空间,以便您可以拥有一些人已经提到的额外缓冲区。

但是现在使用 Composer v2,内存消耗不那么低。因此,如果您仍在使用 Composer v1,我建议您尽可能升级到 v2。速度也有惊人的提升。