NodeJS를 이용해서 대용량 데이터 처리 관련해서 개발을 하다 아래와 같은 에러 메시지를 만났다.
FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
이 에러는 그냥 말 그대로 메모리 사용량이 증가하면서 Javascript엔진이 터져버린 것이다.
NodeJs의 기본적인 메모리 제한은 512MB다. 그럼 내가 처리를 하려고 하는 이 API가 메모리 한계를 뚫은 것...
메모리 누수가 존재하다 생각해서 코드를 봤지만 누수가 될만한 코드는 없었고, 단지 180만번의 반복문을 돌려야 하는 코드로 인해서 메모리 점유율이 상당했던것.
해결 방법으로는
1. 더 큰 메모리를 할당한다.
2. 메모리 누수를 개선한다.
2번 방법은 찾아봤을 때 해당되지 않아서 1번 방법을 사용을 해보려고 한다.
우선 현재 메모리를 확인해 줄 필요가 있다.
node -e 'console.log(v8.getHeapStatistics().heap_size_limit/(1024*1014)'
그 후 아래와 같이 늘리고 싶은 용량을 적으면 메모리 용량이 변경된다.
export NODE_OPTIONS=--max_old_space_size=5000
이렇게 매번 대용량의 작업을 할 때 용량을 늘려줘야 하는건가.. 맘 같아서 캐시 메모리에 넣어서 작업을 진행하던지 하고 싶지만
이 프로젝트는 회사에서 단발성이기 때문에 이것저것 도입을하기가 무척 애매모호한 상황이라서 어려운 것 같다.