Node.js에서 max_old_space_size를 설정하는 방법
Overview
섹션 제목: “Overview”Node.js 작업 중 메모리가 부족하면 max_old_space_size 옵션으로 heap 메모리 제한을 늘릴 수 있다.
이 문서는 일시적으로 메모리를 늘리는 방법, 실행할 때만 지정하는 방법, package.json 스크립트에 넣는 방법을 간단히 정리한다.
How to
섹션 제목: “How to”1) 현재 셸 세션에서 일시적으로 설정하기
섹션 제목: “1) 현재 셸 세션에서 일시적으로 설정하기”export NODE_OPTIONS=--max_old_space_size=40964096은 4GB를 뜻한다.- 해당 셸에서 실행하는 Node.js 프로세스에 적용되며, 새 세션을 열면 다시 설정해야 한다.
2) 실행할 때만 지정하기
섹션 제목: “2) 실행할 때만 지정하기”node --max_old_space_size=4096 ${NODE_SCRIPT_FILE}.js- 특정 스크립트만 메모리 제한을 늘려 실행하고 싶을 때 사용한다.
3) package.json 스크립트에 넣기
섹션 제목: “3) package.json 스크립트에 넣기”{ "scripts": { "start": "node --max_old_space_size=4096 sample-script.js" }}- 자주 실행하는 명령이라면 스크립트에 넣어 두는 편이 편하다.
Example
섹션 제목: “Example”1) 4GB로 일시 설정하기
섹션 제목: “1) 4GB로 일시 설정하기”export NODE_OPTIONS=--max_old_space_size=40962) 8GB로 스크립트 실행하기
섹션 제목: “2) 8GB로 스크립트 실행하기”node --max_old_space_size=8192 sample-script.js3) package.json 스크립트로 실행하기
섹션 제목: “3) package.json 스크립트로 실행하기”npm run startNotes
섹션 제목: “Notes”1) max_old_space_size 단위
섹션 제목: “1) max_old_space_size 단위”- 값은 MB 단위다.
4096은 4GB(1024MB x 4),8192는 8GB(1024MB x 8)를 뜻한다.
2) 모든 문제를 메모리로 해결할 수 있는 것은 아니다
섹션 제목: “2) 모든 문제를 메모리로 해결할 수 있는 것은 아니다”- 메모리 부족 에러를 피하는 데는 도움이 되지만, 빌드나 스크립트 자체가 비효율적인 경우에는 근본 해결이 아닐 수 있다.
3) V8 old space란?
섹션 제목: “3) V8 old space란?”max_old_space_size는 Node.js가 사용하는 V8 엔진의old space크기를 조절하는 옵션이다.- 실무에서는 보통 Heap Memory를 늘린다고 표현하지만, 정확히는 V8 heap 영역 중 오래 살아남은 객체가 쌓이는
old space제한을 늘리는 쪽에 가깝다.
4) Heap Memory와 V8 old space의 차이
섹션 제목: “4) Heap Memory와 V8 old space의 차이”- Heap Memory는 객체가 올라가는 메모리 영역을 넓게 가리키는 표현이다.
- V8 old space는 그 heap 안에서도 오래 살아남은 객체를 저장하는 영역이다.
max_old_space_size는 heap 전체를 직접 조절하는 옵션이라기보다, 오래 유지되는 객체 영역의 제한을 늘리는 옵션으로 이해하는 편이 더 정확하다.