Node.js의 메모리 사용량을 모니터링하는 방법은 무엇입니까?


답변:


66

node-memwatch : Node.JS 코드에서 메모리 누수를 감지하고 찾습니다. 이 튜토리얼 에서 Node.js에서 메모리 누수 추적하기


1
node-memwatch가 더 이상 살아 있지 않은 것 같습니다 (2013 년 3 월에 마지막으로 업데이트 됨). 대안이 있습니까?
Golo Roden 2015

6
@GoloRoden npm install memwatch-next가 잘 작동합니다. 여기에 REPO는 다음과 같습니다 github.com/marcominetti/node-memwatch
fre2ak은

메모리 누수를 찾아 내기
saintedlama

22
memwatch는 더 이상 유지되지 않으며 최신 버전의 노드에서 작동하지 않으므로 신경 쓰지 마십시오.
Mike


153

기본 제공 프로세스 모듈에는 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의 관찰 된 메모리 차이가 타당 함을 확인합니다.


1
노드의 @MestreSan 어떤 버전이 필요하지 않습니다 --expose-gc에 대한 gc기능?
Rob W

1
@MestreSan 난 당신이 필요하다고 말한 적 --expose-gc위해 process.memoryUsage(). gc()(필수 --expose-gc) 가비지 수집을 결정적으로 트리거하여 process.memoryUsage보고서 내용을 더 쉽게 볼 수 있도록 답변에 사용되었습니다 .
Rob W

JS-Stuff를 올바른 방법으로 측정 할 수있는 멋진 답변입니다. 대답 해 주셔서 감사합니다.
suther

당신은 영주들이 이것으로 일했습니다. 더 효율적인 응용 프로그램을 만드는 데 도움이되는 프로세스를 호출하여 노출 된 모든 메서드를 방금 깨달았습니다. 감사.
Andrew

40

또한 노드 프로세스가 아닌 전역 메모리를 알고 싶다면 ':

var os = require('os');

os.freemem();
os.totalmem();

문서보기


1
그러나 freemem ()은 서버에서 사용 가능한 메모리와 동일하지 않습니다. 여유가 아닌 사용 가능한 메모리를 찾는 방법이 있습니까?
Alex


5

Linux / Unix (참고 : Mac OS는 Unix)에서 topM ( Shift+ M)을 사용하여 메모리 사용량별로 프로세스를 정렬합니다.

Windows에서는 작업 관리자를 사용합니다.


@majidarif로 이동 Applications > Utilities하면 Activity Monitor앱 을 찾을 수 있습니다. 그것은 작업 관리자와 동일합니다. OS X에도 top명령이 있습니다.
Ingwie Phoenix

3
htopLinux에서 top 대신 사용하십시오 . 훨씬 낫습니다.
Ryan Shillington
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.