Node.js를 쓰다보면 메모리를 점점 잡아먹는 현상을 발견할 수 있다. 이것은 굉장히 일반적인 현상이고, Node.js에서 쓰는 V8엔진은 기본으로 1.4GB 메모리를 한계로 잡아놓고(기본적으로 64비트는 1.4GB, 32비트는 512MB를 한계로 잡는다.) 그 안에서 메모리를 점점 사용하게된다. 나의 경우는 아마존 프리티어를 사용하기때문에 메모리가 1GB 밖에 되지않아서 메모리 제한을 좀 더 낮추어야했다.
--max-old-space-size=512
메모리 사용을 512MB로 제한하라는 옵션이다. 아래와같이 사용할 수 있다.
혹은 forever 모듈을 사용하고있다면 아래와같이 사용하면 된다.
--expose-gc
가비지 컬랙터를 수동으로 전환한다. 내가 짠 자바스크립트 코드에서 gc();를 호출하면된다. 적어도 30초에 한번씩은 가비지 컬랙팅을 하기를 추천 한다고 한다.
--max-new-space-size=2048
만약 서버 멈춤이 짧은것이 중요하다면 --max-new-space-size=2048 플래그를 사용하면 된다. 이것은 피크 퍼포먼스를 줄여버리기도하지만, 100ms정도로 서버 멈춤이 확 짧아질 것이다.
--noincremental-marking
반면 피크 퍼포먼스가 중요하고 서버 멈춤이 오래 걸려도 괜찮다면 --noincremental-marking 플래그를 사용하면 된다. 이 플래그를 사용하면 1GB당 1초 정도의 서버 멈춤을 예상할 수 있다. 따라서 주로 작은 힙(heaps)이나 일괄 처리 테스크(순차 처리 테스크)에 유용하게 사용된다.
참고
- StackOverFlow : NodeJS / ExpressJS Memory Leak
http://stackoverflow.com/questions/22507667/nodejs-expressjs-memory-leak - StackOverFlow : Is anybody making a Node-optimized V8?
http://stackoverflow.com/questions/8263210/is-anybody-making-a-node-optimized-v8 - 600k concurrent websocket connections on AWS using Node.js
http://www.jayway.com/2015/04/13/600k-concurrent-websocket-connections-on-aws-using-node-js/ - How does Node.js do memory allocation?
https://www.quora.com/How-does-Node-js-do-memory-allocation
'그 외 > 서버 관련' 카테고리의 다른 글
[번역] How does NodeJS work? (0) | 2016.12.31 |
---|---|
(번역)Architecture of Node.js Internal Codebase (0) | 2016.08.31 |
클릭만으로 .github.io 홈페이지 파기 (도메인 설정) (0) | 2016.03.02 |
(번역) Node.js의 핵심 디자인 패턴들 (0) | 2015.07.26 |
[nodejs] 5분만에 서버 푸시 날리기 완성 to iOS, android (0) | 2015.07.05 |
WRITTEN BY
- tucan.dev
개인 iOS 개발, tucan9389