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


PHP Composer update "cannot allocate memory" error (using 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

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

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

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

中进行了描述发生这种情况的原因可能是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

有点旧,但如果有新人正在寻找解决方案,更新您的PHP版本可以解决这个问题。

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

更多详细信息请点击此处:https://github.com/composer/composer/issues/1898#issuecomment-23453850

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

sudo php -dmemory_limit=750M composer.phar update

或者删除供应商文件夹的内容,然后尝试composer更新。

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

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

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

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

希望这能帮助

简单,键入以下命令:

rm -rf vendor/

rm -rf composer.lock

php composer install --prefer-dist

应该适用于内存不足的机器

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

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

        vm.vfs_cache_pressure = 50

我在流浪汉问题上也遇到过同样的问题。我通过积累更多的记忆来修复它。

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

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

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

试试:

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

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

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

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

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

有时通过自我更新composer可以解决问题

php composer.phar self-update

干杯

我将PHP memory_limit从默认的128M增加到512M

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

但现在我发现了一个简单的替代技巧,它对我有效

Runcomposer update --no-dev除了composer update

我在Vagrant中解决了同样的问题。我增加了memory_limit的值并删除composer缓存:sudo rm-R~/.composer最后流浪者重新装弹。

试试这个:

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

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

在我的案例中,我尝试了上面列出的所有内容。我使用的是Laravel和Vagrant,有4GB的内存和交换,内存限制设置为-1。我删除了供应商/并尝试了其他PHP版本。最后,我通过运行使其工作

vagrant halt
vagrant up

然后composer install又像往常一样工作了。

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

使用php composer.phar install

解决了问题。我在wsl2中使用composer时也遇到了同样的问题。

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

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

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

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

希望它能有所帮助!

在我的案例中,当Laravel版本7,8和composer版本1时,出现了这个错误。我将Composer的版本更新为2,它得到了解决。

composer self-update

composer self-update --2

返回到以前的版本:

composer self-update --rollback

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

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

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

memory_limit=1G

将解决这个问题。

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

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

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

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

我将其用于500MB RAM,它对我有效。

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

这对我有效:

根据composer的文档,composer 1使用了更多的内存,升级到最新版本会给你带来更好更快的结果。

https://getcomposer.org/doc/articles/troubleshooting.md#memory-限制错误

请禁用js绑定并增加内存。这应该可以解决问题。我通过禁用js绑定来解决我的问题。

感谢