Composer更新内存限制

时间:2016-03-19 21:28:53

标签: php laravel ssh composer-php

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

composer update

inside / www文件夹,我有laravel和composer instalation

但我收到错误: enter image description here

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

php -d memory_limit=512M composer update

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

怎么办?这里的解决方案是什么?

20 个答案:

答案 0 :(得分:33)

当您运行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,那么您可以让Composer处理更多与使用~2.7相比,可能的版本。

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

答案 1 :(得分:13)

我必须在命令行中组合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

答案 2 :(得分:8)

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

COMPOSER_MEMORY_LIMIT=-1 composer require <package-name>

由@realtebo提及

答案 3 :(得分:3)

如果有足够的内存作曲家可以在内部使用它,并且可以正常运行。无需专门告诉作曲家。

您是否尝试过增加交换内存,因为它对我有用。我将交换内存增加到4096Mb(4GB),现在对我来说一切都很好。

首先使用“ sudo free”查看可用内存和交换内存。然后将swap配置为

对于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

您可以将交换内存增加changin bs = 1024k或2048k或8096k 取决于您的物理卷大小。 使用“ swapon”和swapoff命令查看区别。

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

cat /proc/sys/vm/swappiness

答案 4 :(得分:3)

在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-memory-limits.ini作为单独的文件。您还必须更新此文件的内存限制。以相同的方式在文本编辑器中打开,然后更改为类似2G的格式。内存限制失败的输出将告诉您需要运行多少内存,只需将其设置为大于该值或将-1设置为无限即可。

答案 5 :(得分:2)

您可以在php.ini中更改memory_limit的值

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

使用-1表示无限制,或定义一个明确的值,例如2G

memory_limit = -1
  

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

阅读文档getcomposer.org

答案 6 :(得分:2)

尤其是当您更新大型库或具有很多依赖性的库时,可能会发生此错误。作曲家可能会非常消耗内存。

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

php composer.phar --self-update

您可以通过添加composer内存限制环境变量来临时增加composer的内存限制:

COMPOSER_MEMORY_LIMIT=128MB php composer.phar update

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

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

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

答案 7 :(得分:1)

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

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

我尝试过(来自@Sven答案)

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

但这没用,因为

  

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

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

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

$ COMPOSER_MEMORY_LIMIT=512M php composer.phar update

虽然认为512还不够!

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

答案 8 :(得分:1)

我是在Widnows 10上制作的,并与我一起工作:

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

您可以更改所需的 xx

 memory_limit=XX

答案 9 :(得分:0)

它在以后的作曲家版本中得到了修复。 在 Windows 上,我必须卸载 composer 然后下载+安装最新版本 https://getcomposer.org/download/

现在运行 composer update 有效!

答案 10 :(得分:0)

在Windows 10(Git bash)中,我不得不使用此

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

答案 11 :(得分:0)

对于Laravel

第1步。打开您的终端机

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

第3步。在laravel目录中键入命令which composer,并记下作曲家所在的目录。

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

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

问题已解决

答案 12 :(得分:0)

  • 转到您的php ini文件
  • 设置memory_limit = -1

答案 13 :(得分:0)

对于使用Laravel Homestead的人

将此内容写在Homestead.yaml

variables:
    - key: COMPOSER_MEMORY_LIMIT
      value: -1

答案 14 :(得分:0)

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

答案 15 :(得分:0)

我在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文件进行编辑时遇到问题,请查看this answer,了解如何使用Vim编辑php.ini文件。该文件应如下所示:

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

请注意,这可能会耗尽计算机上的无限内存。生产哈哈可能不是一个好主意。使用Laravel Valet,必须遵循this article并在此处更新内存值:

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

然后使用Valet重新启动服务器:

valet restart

This answer有助于在Mac上使用Laravel Valet更改配置,使更改生效。

答案 16 :(得分:0)

就我而言,所有答案都无济于事。最终证明,更改为64位版本的PHP(M $ Windows)立即解决了该问题。我没有更改任何设置-可以正常工作。

答案 17 :(得分:0)

您的AWS服务器多大?如果它只有1gb的内存,则在php.ini中设置2gb的内存限制将无济于事。

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

how to enable swap.参见此处,它启用了4gb,尽管我通常自己只做1GB。

来源:从laracast网站获得

答案 18 :(得分:0)

设置它以使用所需的内存:

COMPOSER_MEMORY_LIMIT=-1 composer update

答案 19 :(得分:-1)

就我而言,它需要更高的权限以及内存限制的增加。

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