답변:
node-memwatch : Node.JS 코드에서 메모리 누수를 감지하고 찾습니다. 이 튜토리얼 에서 Node.js에서 메모리 누수 추적하기
기본 제공 프로세스 모듈에는 memoryUsage
현재 Node.js 프로세스의 메모리 사용량에 대한 통찰력을 제공 하는 방법 이 있습니다. 다음은 64 비트 시스템에서 Node v0.12.2의 예입니다.
$ node --expose-gc
> process.memoryUsage(); // Initial usage
{ rss: 19853312, heapTotal: 9751808, heapUsed: 4535648 }
> gc(); // Force a GC for the baseline.
undefined
> process.memoryUsage(); // Baseline memory usage.
{ rss: 22269952, heapTotal: 11803648, heapUsed: 4530208 }
> var a = new Array(1e7); // Allocate memory for 10m items in an array
undefined
> process.memoryUsage(); // Memory after allocating so many items
{ rss: 102535168, heapTotal: 91823104, heapUsed: 85246576 }
> a = null; // Allow the array to be garbage-collected
null
> gc(); // Force GC (requires node --expose-gc)
undefined
> process.memoryUsage(); // Memory usage after GC
{ rss: 23293952, heapTotal: 11803648, heapUsed: 4528072 }
> process.memoryUsage(); // Memory usage after idling
{ rss: 23293952, heapTotal: 11803648, heapUsed: 4753376 }
이 간단한 예에서는 약 80MB의 10M 요소 소비자 배열을 할당하는 것을 볼 수 있습니다 (참조 heapUsed
).
당신이 V8의 소스 코드를 보면 ( Array::New
, Heap::AllocateRawFixedArray
, FixedArray::SizeFor
), 당신은 배열에 의해 사용되는 메모리 포인터의 크기를 곱한 고정 값을 더한 길이는 것을 볼 수 있습니다. 후자는 64 비트 시스템에서 8 바이트로, 8 x 10 = 80MB의 관찰 된 메모리 차이가 타당 함을 확인합니다.
--expose-gc
에 대한 gc
기능?
--expose-gc
위해 process.memoryUsage()
. gc()
(필수 --expose-gc
) 가비지 수집을 결정적으로 트리거하여 process.memoryUsage
보고서 내용을 더 쉽게 볼 수 있도록 답변에 사용되었습니다 .
원래 memwatch 는 본질적으로 죽었습니다. 대신 최신 버전의 Node.js 에서 잘 작동하는 memwatch-next 를 사용해보십시오 .
Linux / Unix (참고 : Mac OS는 Unix)에서 top
M ( Shift+ M)을 사용하여 메모리 사용량별로 프로세스를 정렬합니다.
Windows에서는 작업 관리자를 사용합니다.
Applications > Utilities
하면 Activity Monitor
앱 을 찾을 수 있습니다. 그것은 작업 관리자와 동일합니다. OS X에도 top
명령이 있습니다.
htop
Linux에서 top 대신 사용하십시오 . 훨씬 낫습니다.