본문 바로가기
Web/PHP

[ Laravel ] Composer Cannot allocate memory error - Fixed

by 기저귀찬개발자 2020. 1. 9.

개발을 하며 필요한 패키지가 있어서 개발서버에 추가한뒤에 composer install -vvv(상세명령줄 표시 옵션)을 했더니 아래와 같은 상태에서 계속 머물고 있었다.

그래서 다음날 출근하면 업데이트가 되있겠지 하고 실행 뒤 퇴근을 했다.

...
Writing /Users/kimkit/.composer/cache/repo/https---packagist.phpcomposer.com/provider-symfony$config.json into cache
Reading /Users/kimkit/.composer/cache/repo/https---packagist.phpcomposer.com/provider-twig$twig.json from cache
Downloading https://packagist.phpcomposer.com/p/symfony/dependency-injection%24e9e53dff253d1184e7bed2edf20a122b484fe8c45fede4be74fd982f57049516.json
Writing /Users/kimkit/.composer/cache/repo/https---packagist.phpcomposer.com/provider-symfony$dependency-injection.json into cache
Resolving dependencies through SAT

 

다음날. 아래와 같은 오류로 메모리 부족으로 오류가 나타나있었고 install은 실패했었다.

개발 서버의 경우 1G RAM 을 사용하는데 메모리가 부족해서 나타난 오류였다.

Writing /root/.cache/composer/repo/https---packagist.org/provider-drupal$core.json into cache
Downloading http://packagist.org/p/drupal/drupal%24d907fab6efba69fccfb9c69ad5b6680a7b2cde0784e1509580381bbd43e12fb8.json
Writing /root/.cache/composer/repo/https---packagist.org/provider-drupal$drupal.json into cache
Resolving dependencies through SAT
Dependency resolution completed in 45971.970 seconds
Analyzed 52523 packages to resolve dependencies
Analyzed 2003744 rules to resolve dependencies
  - Removing symfony/polyfill-ctype (v1.12.0)
The following exception is caused by a lack of memory and not having swap configured
Check https://getcomposer.org/doc/articles/troubleshooting.md#proc-open-fork-failed-errors for details

                                                     
  [ErrorException]                                   
  proc_open(): fork failed - Cannot allocate memory  
                                                    

 

 

 

 

구글링을 하며 여러 방법을 찾아보고 시도해보았다. 

1. composer clear-cache 후 install -> 실패

2. php memory limit 해제 -> 실패

- 아래와 같은 명령어를 치고 나오는 메모리를 확인해본다. 아니면 php.ini 파일을 찾아서 memory limit을 확인해본다.

php -r "echo ini_get('memory_limit').PHP_EOL;"

- 나의 경우 /etc/php/7.4/cli/php.ini 확인해보니 -1값은 무제한으로 제한이 풀어져있었다.

- 해당 값이 낮을 경우 올려서 해보면 해결될 수도 있다.

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

 

3. local에서 composer를 install하여 생성된 composer.lock을 올려서 install -> 성공

- composer의 경우 install을 할때 composer.json을 해석하여 의존성 주입을 마친 composer.lock을 생성한다.  

  그리고 composer.lock 파일이 있을 경우 composer.json 해석하는 과정을 건너띄게 되므로 메모리 사용이 현저히 적어진다.

- 해당 부분에서 주의할 점은 로컬환경과 개발서버환경의 php 버전과 composer 버전이 동일해야 별다른 이슈가 없이 install이 마무리 될 것이다.

- 추가적으로 composer의 버전은 최신것을 사용하는 것이 빠르고 좋다고 했다.

composer --version #버전체크
composer self-update #최신 버전 사용(1.0.0 버전에서는 먹히지 않았다.)

 

 

 

 

댓글