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
와 같이 환경 변수를 추가해줍니다.
- 위의 옵션을 추가하는 것으로 프로그램의 최대 힙이 증가하여 서비스의 가용성을 높힐 수 있습니다.