본문으로 건너뛰기

Docker 기반의 Node.js 앱에서 out of memory 문제 발생

문제

  • docker 기반의 node.js 앱을 실행시키고 있을 때, 서버가 동작 중에 out of memory 문제가 발생했습니다.
  • node.js 의 v8 엔진의 경우 기본 값으로 힙 메모리의 한계가 정해져있습니다. 아래와 같은 힙 메모리의 제한 용량을 가지고 있습니다.
    • v12 미만 : 1.35GB
    • v14 미만 : 2GB
    • v14 이상 : 4GB
  • 이러한 메모리 제한을 모르고 있는 상태에서 앱이 계속 메모리를 사용하여 서비스가 죽어버렸습니다.
  • 해당 서비스의 인스턴스는 12GB 램을 가지고 있었고, 메모리가 많이 사용 될 때 4GB 가 사용되어 여유 공간이 7GB 이상 남아있었습니다.
  • 서비스의 구조를 제대로 인지하지 못하여 메모리가 낭비되고, 서비스의 가용성이 줄어들고 있는 상황이었습니다.

해결 방법

  • node 를 실행할 때, node --max-old-space-size=8192 start.js 와 같이 --max-old-space-size
  • docker 는 NODE_OPTIONS=--max-old-space-size=8192 와 같이 환경 변수를 추가해줍니다.
  • 위의 옵션을 추가하는 것으로 프로그램의 최대 힙이 증가하여 서비스의 가용성을 높힐 수 있습니다.