PHP 编写器更新“无法分配内存”错误(使用 Laravel4)

我就是解决不了这个问题。

我用的是 Linode 1G 内存的基本计划。试图通过 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
255030 次浏览

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

我也遇到过同样的问题。我在一个 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 获取的 cache else 中获取包

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

或者

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

希望这个能帮上忙

虽然有点老,但是为了以防有新的人在寻找解决方案,更新 PHP 版本可以解决这个问题。

此外,您还应该提交 comper.lock 文件,并在资源密集程度较低的生产环境中进行编写器安装。

更多详情请浏览此网页: Https://github.com/composer/composer/issues/1898#issuecomment-23453850

在我的512mb 主机上有同样的问题。

Phar 安装解决

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

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

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

简单,输入以下命令:

rm -rf vendor/

rm -rf composer.lock

php composer install --prefer-dist

应该适用于低内存的机器

我在使用 数字海洋托管的最便宜的服务器(512MB 内存)上遇到过类似的问题,而且我还在同一台服务器上运行 Jenkins CI。在我停止 Jenkins 实例之后,编写器安装命令工作了(好吧,从某种程度上说,它失败了,除了已经安装之外,还丢失了 mcrypt 扩展!).

如果服务器上有另一个应用程序在运行,那么尝试停止它并重新运行命令可能是值得的。

我对流浪汉也有同样的问题,我通过增加记忆来解决它。

 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

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

有时通过自我更新的作曲家它解决了问题

php composer.phar self-update

干杯

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

但现在我找到了一个简单的替代技巧,对我很有效。

composer update以外

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

我在《流浪汉》里也解决了同样的问题。 我增加了 内存限制的值 并删除作曲家缓存: 作曲家 最后是流浪汉装弹。

试试这个:

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

这对我在森托斯6工作

进行交换并再次运行作曲家命令。我希望它能为您工作。

 $ 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

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

        vm.swappiness=10

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

        vm.vfs_cache_pressure = 50

作为作曲家故障排除指南 < a href = “ https://getposer.org/doc/article/trouble eshoot.md # proc-open-fork-false-error”rel = “ noReferrer”> 这里 这可能是因为 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

试试这个:

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


/sbin/mkswap /var/swap.1


/sbin/swapon /var/swap.1

编辑 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 ini on Php 7.0 Php 7.0

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

Memory _ limit = 128M 到4G

# AWS # AMAZONLINUX # MAGENTO2 # PHP7.0

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

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

请禁用 js 捆绑并增加内存。这应该可以修复它。我通过禁用 js 捆绑修复了我的。

谢谢

在我的情况下,我尝试了上面列出的所有方法。我使用的 Laravel 和 Vagrant 有4GB 内存和一个交换机,内存限制设置为 -1。我删除了供应商/并尝试了其他 PHP 版本。最后,我通过跑步使它工作起来

vagrant halt
vagrant up

然后作曲家安装再次像往常一样工作。

我使用它为500 MB 内存,它为我工作。

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

我在 wsl2中使用作曲家也有同样的问题。

MicrosoftWSL 团队引入了一个名为. wslconfig 的文件来调整 WSL2设置。

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

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

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

希望能有帮助!

这对我很有效:

根据作曲家的文档,作曲家1使用了更多的内存,升级到最新版本将给您带来更好更快的结果。

Https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors