[php] Composer 업데이트 메모리 제한

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

composer update

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

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

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

php -d memory_limit=512M composer update

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

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



답변

를 실행 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의 여유 메모리가 필요합니다.


답변

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

COMPOSER_MEMORY_LIMIT=-1 composer update


답변

사용 가능한 모든 메모리를 소비하고 프로세스가 종료되기 때문에 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/


답변

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


답변

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

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


답변

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

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

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

memory_limit = -1

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

getcomposer.org 문서 읽기


답변

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