Composer 업데이트 메모리 제한


85

내 호스팅에서 composer 업데이트를 실행해야하므로 ssh로 로그인하고 comand를 실행합니다.

composer update

laravel 및 작곡가 설치가있는 / www 폴더 내부

하지만 오류가 발생합니다. 여기에 이미지 설명 입력

내 호스팅 제공 업체와 연락하여 명령을 실행하라고 말합니다.

php -d memory_limit=512M composer update

이 명령을 실행했지만 "파일을 열 수 없습니다 : composer"가 표시됩니다.

무엇을해야합니까? 여기서 해결책은 무엇입니까?


2
@Sven이 말했듯이 프로덕션 composer install에서는 충분합니다. 귀하의 경우 공유 호스팅을 사용하는 동안 composer update작동 하지 않을 것이라고 생각 하므로 유일한 방법은 Digital Ocean, Linode와 같은 VPS 호스팅을 구입하는 것입니다.
Lucas Silva

답변:


131

를 실행 composer update하면 OS는 구성된 경로를 조사하고 해당 이름의 실행 파일을 찾습니다.

실행하는 경우 php composer updatecomposer문자열이 어떤 경로에서 검색되지 않는 PHP에 매개 변수로 취급됩니다. 실행하려면 전체 경로를 제공해야합니다.

실행 which composer하면 OS가 컴포저 실행 파일을 찾은 위치를 알려준 다음 PHP 명령에서 전체 경로를 사용하기 만하면됩니다.

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

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

512MB는 너무 적을 수 있습니다. 사용하는 종속성의 수와 이론적으로 허용하는 다양한 버전 (예 : Symfony를 허용 ~2.3하면 Composer가 사용하는 것보다 훨씬 더 많은 가능한 버전을 처리하도록합니다. ~2.7.

또한 프로덕션 컴퓨터에서 Composer를 실행하는 것은 최선의 방법이 아닙니다. Github에 대한 액세스 권한이 있어야하고, 액세스 자격 증명을 제공하고, VCS 도구가 설치되어 있어야하며, 업데이트 중에 원격 호스팅 서버 중 하나가 오프라인 상태 인 경우 사이트를 쉽게 중단 할 수 있습니다. 모든 준비를 수행 한 다음 모든 파일을 프로덕션 서버로 이동하는 배포 시스템에서 Composer를 사용하는 것이 좋습니다.

최신 정보

이제 2020 년이되었고 Composer가 메모리를 관리하는 방식이 상당히 변경되었습니다. 가장 중요한 것은 제한이 너무 낮게 설정된 경우 Composer가 자체적으로 메모리 제한을 증가 시킨다는 것입니다. 그러나 이것은 메모리가 너무 적은 컴퓨터에서 메모리 부족 문제를 즉시 유발합니다. 와 같은 환경 변수를 설정하여 Composer가 더 적은 메모리를 사용하도록 할 수 COMPOSER_MEMORY_LIMIT=512M있지만 Composer가 올바르게 작동하기 위해 더 많은 메모리가 필요한 경우 문제가 발생합니다.

내 요점은 사실입니다. 메모리가 너무 적은 컴퓨터에서 Composer를 실행하지 마십시오. 모든 것을 업데이트하려면 잠재적으로 1.5GB의 여유 메모리가 필요합니다.


나는 단지 원한다 : php -r "readfile ( ' getcomposer.org/installer' );" | PHP와 그 후 모든 것이 잘 작동합니다 ... 또한 THANS FOR HELP
Andrew

34
php -d memory_limit=-1 $(which composer) update작성기 경로를 지정할 필요가 없기 때문에 더 편리합니다.
Rax

1
이것은 훌륭합니다. 단일 명령으로 메모리를 늘릴 수 있는지 몰랐습니다. 이것이 바로 이것이 옳은 일입니까?
plushyObject

창문은 어때?
Ray

1
@Rax 한 가지 더, mingw의 Windows에서이 명령을 실행하는 경우 경로를 변환해야한다는 오류가 발생 php -d memory_limit=-1 $(which composer).phar update
하므로이

139

다음과 같이 원하는만큼 메모리를 사용하도록 설정하십시오.

COMPOSER_MEMORY_LIMIT=-1 composer update

이 값이나 값을 전역 적으로 어떻게 설정할 수 있습니까? CLI를 통해 매번이 작업을 수행하는 대신?
snh_nl

@snh_nl 당신은 PHP 메모리 제한을 설정해야합니다. 예 : chapterthree.com/blog/how-fix-composer-memory-issue
jasonflaherty

2
/ etc / profile (또는 사용하는 모든 쉘)에서 COMPOSER_MEMORY_LIMIT=-1; export COMPOSER_MEMORY_LIMIT. 아니면 셸 별칭을 정의 하시겠습니까? alias memcomposer='COMPOSER_MEMORY_LIMIT=-1 composer', memcomposer대신 사용composer
diamondsea

그것은 여전히 ​​말한다Fatal error: Allowed memory size of 2147483648 bytes exhausted (tried to allocate 4096 bytes) in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52
Ozan Kurt

15

사용 가능한 모든 메모리를 소비하고 프로세스가 종료되기 때문에 composer에 문제가 있습니다 (실제로 출력 메시지는 "Killed"입니다).

그래서 저는 작곡가 메모리 사용을 제한하는 솔루션을 찾고있었습니다.

나는 시도했다 (@Sven 답변에서)

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

하지만 작동하지 않았습니다.

"Composer는 내부적으로 memory_limit를 1.5G로 증가시킵니다."

-> 작곡가 공식 웹 사이트에서 가져온 것입니다.

그런 다음 작동하는 명령을 찾았습니다.

$ COMPOSER_MEMORY_LIMIT=512M php composer.phar update

비록 제 경우에는 512MB로는 충분하지 않습니다!

출처 : https://www.agileana.com/blog/composer-memory-limit-troubleshooting/


1
내가 좋아하는 작곡가를 사용했다 그래서 : COMPOSER_MEMORY_LIMIT = 1024M 작곡가는 '모듈'필요
jasonflaherty을

1
비슷하게 사용했습니다COMPOSER_MEMORY_LIMIT=-1 composer require <package name>
realtebo

12

나는 결합했다 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

이것은 Mac OS X El Capitan에서 나를 위해 일한 유일한 것입니다.
ymd_

나를 위해 일했습니다, 감사합니다
Sayydika

8

충분한 메모리가 있다면 컴포저는 내부적으로 그것을 소비하고 아무 문제없이 실행합니다. 작곡가에게 특별히 지시 할 필요가 없습니다.

스왑 메모리를 늘리려 고 했습니까? 스왑 메모리를 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

4

memory_limitphp.ini 에서 값을 변경할 수 있습니다.

php.ini 파일의 제한을 늘리십시오.

무제한의 경우 -1을 사용하거나 2G와 같은 명시 적 값을 정의하십시오.

memory_limit = -1

참고 : Composer는 내부적으로 memory_limit를 1.5G로 늘립니다.

getcomposer.org 문서 읽기


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로 설정하면됩니다.


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 ...

1

AWS 서버는 얼마나 큽니까? 1GB의 램만있는 경우 php.ini에서 메모리 제한을 2GB로 설정하면 도움이되지 않습니다.

더 많은 RAM을 사용할 수 있도록 서버 측을 늘릴 수 없거나 늘리고 싶지 않은 경우 SWAP도 활성화 할 수 있습니다.

스왑을 활성화하는 방법 은 여기를 참조하십시오 . 일반적으로 1GB 만 사용하지만 4GB를 사용할 수 있습니다.

출처 : laracast 사이트에서 가져옴


0

제 경우에는 어떤 답변도 도움이되지 않았습니다. 마지막으로 64 비트 버전의 PHP (M $ Windows)로 변경하면 문제가 즉시 해결되었습니다. 설정을 변경하지 않았습니다. 그냥 작동했습니다.


0

나는 Widnows 10에서 이것을 만들고 나와 함께 일했습니다.

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

원하는 xx 값을 변경할 수 있습니다.

 memory_limit=XX

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=-1php.ini 파일에 추가 하십시오. Vim을 사용하거나 php.ini 파일을 편집하는 데 문제가있는 경우 Vim으로 php.ini 파일 을 편집하는 방법에 대한 이 답변을 확인하십시오 . 파일은 다음과 같아야합니다.

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

이것은 컴퓨터에서 무한한 양의 메모리를 차지할 수 있습니다. 아마도 제작에 좋은 생각이 아닐 것입니다. Laravel Valet 은이 기사 를 따라야했고 여기에서 메모리 값을 업데이트해야했습니다.

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

그런 다음 Valet로 서버를 다시 시작하십시오.

valet restart

이 답변 은 Mac에서 Laravel Valet으로 구성을 변경하여 변경 사항이 적용되는데도 도움이되었습니다.


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

3
다른 사람들이 배울 수 있도록 답변에 설명을 추가하십시오
Nico Haase


0

나에게 가장 적합한 솔루션은

COMPOSER_MEMORY_LIMIT=-1 composer require <package name>

@realtebo에 의해 언급



-1

제 경우에는이 메모리 제한 증가와 함께 더 높은 권한이 필요했습니다.

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

Composer를 함께 실행 sudo하면 권한이 혼동 될 수 있으므로 좋은 생각이 아닙니다. 이것은 composer update서버에서 실행중인 것 같습니다 . 계산 된 종속성을 버전 제어하에 두는 것이 훨씬 더 달라지기 때문에 이것은 나쁜 습관입니다
Nico Haase

@NicoHaase에 동의하십시오. 이것을 사용하는 데 많은주의가 필요합니다! 감사.
Naser Nikzad
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.