Composer更新内存限制

And*_*rew 25 php ssh laravel composer-php

我需要在我的主机上运行composer update,所以我使用ssh登录并尝试运行comand:

composer update
Run Code Online (Sandbox Code Playgroud)

在/ www文件夹里我有laravel和composer instalation

但我得到错误: 在此输入图像描述

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

php -d memory_limit=512M composer update
Run Code Online (Sandbox Code Playgroud)

我运行此命令,但得到:"无法打开文件:composer"

该怎么办?什么是解决方案?

Sve*_*ven 46

运行时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
...
Run Code Online (Sandbox Code Playgroud)

请注意,512MB可能太少.我的看法是它会高兴地占用1GB或更多,这取决于您使用的依赖项数量和理论上允许的各种版本,即如果您允许使用Symfony ~2.3,那么与使用Sympfony相比,您可以使Composer处理更多可能的版本~2.7.

另请注意,在生产计算机上运行Composer并不是最好的选择.您必须有权访问Github,可能提供访问凭据,安装了VCS工具,如果任何远程主机服务器在您更新期间处于脱机状态,您将很容易破坏您的站点.最好在部署系统上使用Composer来完成所有准备工作,然后将所有文件移动到生产服务器上.

  • `php -d memory_limit=-1 $(whichcomposer) update` 更方便,因为不需要指定 Composer 路径。 (53认同)

Rom*_*nev 30

对我来说最好的解决方案是

COMPOSER_MEMORY_LIMIT=-1 composer require <package-name>
Run Code Online (Sandbox Code Playgroud)

@realtebo 提到


dia*_*sea 18

将其设置为使用所需的内存:

COMPOSER_MEMORY_LIMIT=-1 composer update
Run Code Online (Sandbox Code Playgroud)

  • 使用 `COMPOSER_MEMORY_LIMIT=-1; 在您的 /etc/profile(或您使用的任何 shell)中全局定义它;导出 COMPOSER_MEMORY_LIMIT`。或者定义一个 shell 别名?`alias memcomposer='COMPOSER_MEMORY_LIMIT=-1composer'`,然后使用 `memcomposer` 而不是 `composer` (4认同)

Die*_*ero 17

我遇到了 Composer 的问题,因为它消耗了所有可用内存,然后进程被终止(实际上,输出消息是“Killed”)

所以,我一直在寻找一种限制作曲家内存使用的解决方案。

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

$ php -d memory_limit=512M /usr/local/bin/composer update
Run Code Online (Sandbox Code Playgroud)

但它没有用,因为

“Composer 内部将 memory_limit 增加到 1.5G。”

-> 来自 composer 官方网站。

然后我找到了一个有效的命令:

$ COMPOSER_MEMORY_LIMIT=512M php composer.phar update
Run Code Online (Sandbox Code Playgroud)

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

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


Ger*_*ied 15

我不得不在命令行中结合COMPOSER_MEMORY_LIMITmemory_limit

在 Windows 上:

set COMPOSER_MEMORY_LIMIT=99999999999&& php -d memory_limit=-1 composer.phar update
Run Code Online (Sandbox Code Playgroud)

在 Linux 上:

export COMPOSER_MEMORY_LIMIT=99999999999 && php -d memory_limit=-1 composer.phar update
Run Code Online (Sandbox Code Playgroud)

  • 只需执行“set COMPOSER_MEMORY_LIMIT=-1”,然后我的作曲家命令就可以在 Windows 上工作了。 (3认同)

Cos*_*run 11

如果有足够的内存,composer 会在内部消耗它并毫无问题地运行。不需要特别告诉作曲家去做。

您是否尝试过增加交换内存,因为它对我有用。我将交换内存增加到 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
Run Code Online (Sandbox Code Playgroud)

使其永久添加到 /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
Run Code Online (Sandbox Code Playgroud)

您可以通过更改 bs= 1024k 或 2048k 或 8096k 来增加交换内存,具体取决于您的物理卷大小。使用 'swapon' 和 swapoff 命令来查看差异。

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

cat /proc/sys/vm/swappiness
Run Code Online (Sandbox Code Playgroud)


Vla*_*ero 5

您可以更改memory_limitphp.ini 中的值

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

使用 -1 表示无限制或定义显式值,如 2G

memory_limit = -1
Run Code Online (Sandbox Code Playgroud)

注意:Composer 内部将 memory_limit 增加到 1.5G。

阅读文档getcomposer.org


Taw*_*mro 5

我在 Windows 10 上做了这个并和我一起工作:

php -d memory_limit=-1 C:/ProgramData/ComposerSetup/bin/composer.phar update
Run Code Online (Sandbox Code Playgroud)

你可以改变你想要的xx

 memory_limit=XX
Run Code Online (Sandbox Code Playgroud)