새소식

300x250
3. Database/Error모음

[ yarn(npm) install error ] - "allocation failure scavenge might not succeed" 해결방법 ( Nodejs Increate The Memory Limit )

  • -
728x90

노드 프로젝트를 빌드 하다보면 다양한 원인으로 빌드가 잘 안되고 다음과 같은 메세지를 보게될 수도 있다.

 

ex) 에러 메세지

... 중략
allocation failure scavenge might not succeed
...

 

 

ex) 에러 발생 환경 예시

 - AWS 프리티어와 같은 저스펙 서버인 경우

 - 프로젝트가 점점 비대해져 빌드시 메모리 오류 발생

 - 로컬환경에서 빌드시 각각의 개발자 PC 스펙 및 프로젝트 규모에 따른 메머리 부족현상 

등등 

 

※ 결론

 - NodeJs는 프로세스를 시작할 때 default 메모리를 제한하게 되어 있다. (os, node version 등에 따라 다 다르다.)

https://medium.com/geekculture/node-js-default-memory-settings-3c0fe8a9ba1

   그렇기 때문에 특정 환경에 따라, 메모리 할당문제로 Node.js 프로세스가 종료될 수 있다.

 

 - 노드의 메모리 제한을 조정하여 해결 가능하다. (물론 메모리를 많이 사용하지 않도록 소스레벨에서 최적화하는 것이 좋다.)

ex) V8의 다음 명령어 옵션을 통해 메모리 할당량을 증가 시킬 수 있다.

-- ex1
node --max-old-space-size=8192 index.js

-- ex2
export NODE_OPTIONS=--max-old-space-size=4096
yarn install

-- ex3
export NODE_OPTIONS=--max-old-space-size=2048 && yarn install

 

 

위의 결론에 다다르기까지 어떠한 방법으로 확인 할 수 있었는지 기록 해두려 한다.

 

1. 에러 현상 확인

 - 위에서 명시하였듯이 다양한 환경에 따라 다음과 같이, 메모리 문제가 발생할 수 있다.

ex) 에러 메세지

... 중략
allocation failure scavenge might not succeed
...

 

2. 에러 발생 원인 방법

 

 - node.js는 기본적으로 default 메모리 제한을 하고 있다고 하는데 나의 경우 특정 서버에서 유독 문제가 많아 확인해 보게 되었다. 

 

1) node Versin 확인 및 default heap_size_limit 용량 확인

node -v

 

ex) 문제가 있는 서버 : v6.17.1 ( release Date : 2019-04-13 )

 

ex) 상대적으로 문제가 덜한 서버 : v16.18.0 ( release Date : 2022-10-12 )

 

 - node의 Release Date를 확인해보면 문제가 된 서버에 꽤 오래전 version으로 설치가 되어있음을 확인할 수 있었다.

 

 - 각각의 서버에서 확인한 node Version별 default heap_size_limit.

 

3. 해결 방법

 

※ 가장 많은 도움이 되었던 사이트에서는 다음과 같이 Best Practice 를 권고 하고 있다. (이미지 참고)

 - 우리 사이트의 경우 2가지 Node Version 변경 및 "--max-old-space-size"를 고정 하는 2가지 방법으로 해결 하였다.

 

1) node Version변경

ex) os, node 버전에 따라 default memory limits가 있음을 알 수 있다.

 - 우리싸이트의 경우는 6.x 버전을 사용하고 있어 16.x대의 version으로 변경 하였다.

https://medium.com/geekculture/node-js-default-memory-settings-3c0fe8a9ba1

 

 

 

2) oom을 해결하기 위해 적정 수준의 메모리를 할당하여 준다.

 - 우리의 환경의 경우 한 Server에서 2개 이상의 Node.js Project가 시작될 수 있어

   실제 memory 사용율을 측정 해 보며 최적의 수치를 정하였다. (+@ 가용 memory, cpu 증설 등의 작업)

export NODE_OPTIONS=--max-old-space-size=2048 && yarn install

 

 

ex) 다음 내용들은 참고 하자. 

 

ex) nodeVersion 22v 기준으로 만약 2GB의 Server에서는 약 0.5GB를 여유를 두고 1.5GB로 제한하는 가이드를 확인할 수도 있다.

https://nodejs.org/api/cli.html#--max-old-space-sizesize-in-megabytes

 

※ 만약 우리와 다르게 Server의 memory자체가 부족한 경우 하기 옵션들을 고려할 수도 있을 것 같아 남겨 둔다.

https://stackoverflow.com/questions/56982005/where-do-i-set-node-options-max-old-space-size-2048

 

※ 대부분의 내용은 하기 stack overflow 내용을 확인하여 작성 및 현상 해소가 가능하였다.

https://medium.com/geekculture/node-js-default-memory-settings-3c0fe8a9ba1
https://stackoverflow.com/questions/48387040/how-do-i-determine-the-correct-max-old-space-size-for-node-js

https://nodejs.org/api/cli.html#--max-old-space-sizesize-in-megabytes

 

300x250
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.