作曲家更新内存限制

我需要在我的主机上运行作曲家更新,所以我用 ssh 登录,并尝试在/www 文件夹中运行以下命令,我有 Laravel 和作曲家安装:

composer update

我得到了这个错误:

enter image description here

我正在联系我的托管服务提供商,他们告诉我运行命令:

php -d memory_limit=512M composer update

我运行这个命令,但我得到: “无法打开文件: 作曲家”

怎么办? 解决办法是什么?

253373 次浏览

当您运行 composer update时,操作系统将查看配置的路径并尝试定位具有该名称的可执行文件。

在运行 php composer update时,composer字符串被视为 PHP 的参数,不会在任何路径中搜索该参数。必须提供完整路径才能运行它。

运行 which composer将告诉您操作系统在哪里找到编写器可执行文件,然后您只需在 PHP 命令中使用完整路径:

$>which composer
/usr/local/bin/composer


$>php -d memory_limit=512M /usr/local/bin/composer update
...

注意,512MB 可能太少了。我的看法是,它将很高兴地采取1GB 或更多,这取决于你使用的依赖项的数量和你理论上允许的版本的多样性,也就是说,如果你允许 Symfony ~2.3,那么你使作曲家处理更多的可能的版本比使用 ~2.7

还要注意,在生产机器上运行 Composer 并不是最好的方法。您必须能够访问 Github,可能需要提供访问凭据,安装 VCS 工具,如果在您的更新期间任何远程托管服务器脱机,您将很容易破坏您的站点。在完成所有准备工作的部署系统上使用 Composer,然后将所有文件移动到生产服务器上,这是一个更好的主意。

更新

现在是2020年,作曲家管理内存的方式发生了很大的变化。最重要的是,如果 Composer 遇到设置得太低的限制,它会自己增加内存限制。然而,这会立即触发内存不足的问题,即在安装了太少内存的机器上运行。你可以通过设置像 COMPOSER_MEMORY_LIMIT=512M这样的环境变量使 Composer 使用更少的内存,但是如果 Composer 需要更多的内存才能正确操作,这就会产生问题。

我的主要观点仍然是正确的: 不要在安装的内存太少的机器上运行 Composer。您可能需要1.5 GB 的空闲内存来更新所有内存。

您可以更改 php.ini 中的 memory_limit

尝试增加 php.ini 文件中的限制

使用 -1表示无限制,或者定义一个像2G 这样的显式值

memory_limit = -1

注意: Composer 内部将 memory _ limit 增加到1.5 G。

阅读文档 Getcomposer.org

我在使用作曲器时遇到了一些问题,因为它占用了所有可用的内存,然后进程就被终止了(实际上,输出消息是“ Kkill”)

因此,我正在寻找一个解决方案,以限制作曲家的内存使用。

我试过了(来自@Sven 的回答)

$ php -d memory_limit=512M /usr/local/bin/composer update

但没成功是因为

“作曲家内部将内存限制提高到1.5 G”

- > 来自作曲家官方网站。

然后我发现了一个有效的命令:

$ COMPOSER_MEMORY_LIMIT=512M php composer.phar update

虽然,在我的情况下512mb 是不够的!

资料来源: https://www.agileana.com/blog/composer-memory-limit-troubleshooting/

设置为使用尽可能多的内存:

COMPOSER_MEMORY_LIMIT=-1 composer update

如果有足够的内存编写器将内部消耗它,并运行没有任何问题。不需要特别告诉作曲家去做。

你有没有试过增加你的交换内存,因为它为我工作。我将交换内存增加到4096Mb (4GB) ,现在看起来非常棒。

首先使用“ sudo free”查看可用内存和交换内存,

对于 Debian:

sudo fallocate -l 4G /swapfile
sudo dd if=/dev/zero of=/swapfile bs=4096k count=1048
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

要使其永久化,请将此文件添加到/etc/fstab 文件 /swapfile swap swap defaults 0 0

对于 CentOS:

[root@myserver]:/# cd /var
[root@myserver]:/var# touch swap.img
[root@myserver]:/var# chmod 600 swap.img
[root@myserver]:/var# mkswap /var/swap.img


[root@myserver]:/var# dd if=/dev/zero of=/var/swap.img bs=4096k count=1000
[root@myserver]:/var# mkswap /var/swap.img
[root@myserver]:/var# swapon /var/swap.img

你可以通过设置 bs = 1024k 或者2048k 或者8096k 来增加你的交换内存 取决于你的物理卷大小。 使用‘ swapon’和 swapoff 命令可以看出区别。

检查“ swappiness”(60应该是好的,)

cat /proc/sys/vm/swappiness

你的 Aws 服务器有多大?如果它只有1gb 的 RAM,那么在 php.ini 中设置2gb 的内存限制是没有用的。

如果不能/不想增加服务器端以获得更多可用 RAM,也可以启用 SWAP。

看看这里的 如何启用交换。它支持4gb,虽然我自己通常只支持1GB。

来源: 来自 Laracast 网站

这种错误可能会发生,特别是当您更新具有很多依赖项的大型库或库时。作曲家可能非常缺乏内存。

请确保您的作曲家本身已更新到最新版本:

php composer.phar --self-update

你可以通过添加作曲家内存限制环境变量来暂时增加作曲家的内存限制:

COMPOSER_MEMORY_LIMIT=128MB php composer.phar update

使用格式“128M”为兆字节或“2G”为千兆字节。您可以使用值“-1”来完全忽略内存限制。

另一种方法是增加 PHP 的内存限制:

php -d memory_limit=512M composer.phar update ...

我必须在命令行中组合 COMPOSER_MEMORY_LIMITmemory_limit:

在 Windows 上:

set COMPOSER_MEMORY_LIMIT=99999999999&& php -d memory_limit=-1 composer.phar update

在 Linux 上:

export COMPOSER_MEMORY_LIMIT=99999999999 && php -d memory_limit=-1 composer.phar update

对我来说,没有一个答案有帮助。最后,改用64位版本的 PHP (M $Windows)立即解决了这个问题。我没有改变任何设置-它只是工作。

在 MAC OS High Siera 上,我运行了以下代码:

MacBook-Pro:asiu jack$ php --ini

返回:

Configuration File (php.ini) Path: /usr/local/etc/php/7.4
Loaded Configuration File:         /usr/local/etc/php/7.4/php.ini
Scan for additional .ini files in: /usr/local/etc/php/7.4/conf.d
Additional .ini files parsed:      /usr/local/etc/php/7.4/conf.d/ext-
opcache.ini,
/usr/local/etc/php/7.4/conf.d/php-memory-limits.ini

上面的所有答案都是设置加载的配置,这个配置会更新,但是要注意其他的。解析的 ini 文件有 php 内存限制。Ini 作为一个单独的文件。您还必须更新这个文件内存限制。同样的方式打开在文本编辑器和改变像2G。内存限制故障的输出应该告诉您需要运行多少内存,只需将其设置为高于该值,或者设置为 -1表示无限。

在我的例子中,随着内存限制的增加,它需要更高的权限。

sudo COMPOSER_MEMORY_LIMIT=2G php /opt/bitnami/php/bin/composer.phar update

我在 Windows10上做了这个,和我一起工作:

php -d memory_limit=-1 C:/ProgramData/ComposerSetup/bin/composer.phar update

可以更改所需的 谢谢

 memory_limit=XX

我和 Homestead 一起运行 Laravel 6也遇到了这个问题。正如在其他答案中建议的那样,您可以在单个命令前面加上 COMPOSER_MEMORY_LIMIT=-1的前缀,然后正常运行该命令。如果您想更新您的 PHP 配置,以始终允许无限的内存遵循以下步骤。

vagrant up
vagrant ssh
php --version # 7.4
php --ini # Shows path to the php.ini file that's loaded
cd /etc/php/7.4/cli # your PHP version. Each PHP version has a folder
sudo vi php.ini

memory_limit=-1添加到 php.ini 文件中。如果在使用 Vim 或编辑 php.ini 文件时遇到困难,请检查 这个答案,了解如何使用 Vim 编辑 php.ini 文件。文件应该是这样的:

; Maximum amount of memory a script may consume
; http://php.net/memory-limit
memory_limit = -1

请注意,这可能会占用您机器上的无限内存。可能不是一个好主意,生产哈哈大笑。与 Laravel 代客泊车必须遵循 这篇文章和更新内存值在这里:

sudo vi /usr/local/etc/php/7.4/conf.d/php-memory-limits.ini

然后重新启动服务器与代客泊车:

valet restart

这个回答 也有助于更改 Mac 上的 Laravel Valet 配置,使更改生效。

<C:\>set COMPOSER_MEMORY_LIMIT=-1
<C:\>composer install exhausted/packages

对于那些使用 Laravel 家园的人

把这个写在 Homestead.yaml

variables:
- key: COMPOSER_MEMORY_LIMIT
value: -1

对我来说最好的解决办法是

COMPOSER_MEMORY_LIMIT=-1 composer require <package-name>

由@realtebo 提到

  • 转到 php ini文件
  • 设定 memory_limit = -1

为了 Laravel

第一步,打开终端

步骤2。 cd进入您的 laravel 目录

在 laravel 目录中键入命令 which composer,并注意编曲器所在的目录。

第4步。运行命令 php -d memory_limit=-1 /opt/cpanel/bin/composer update(如果它对您有效,您也可以运行代码)

(将 /opt/cpanel/bin/composer更改为步骤3中返回的目录路径)

问题解决了

在 Windows 10(Git bash)中,我必须使用这个

php -d memory_limit=-1 C:\\composer\\composer.phar install

它固定在后来的作曲家版本。 在 Windows 上,我必须卸载音乐作曲家,然后下载 + 安装最新版本 < a href = “ https://getposer.org/download/”rel = “ nofollow norefrer”> https://getcomposer.org/download/

现在运行 composer update工作!

首先,尝试更新作曲家:

composer self-update

由于某些原因,作曲家 v1.0不能正常工作,在我的情况下,我必须更新作曲家,然后我可以执行:

composer update
COMPOSER_MEMORY_LIMIT=-1 composer update --ignore-platform-reqs