Node.js의 사용 메모리를 관찰하는 방법
소개
메모리 사이즈의 취득 방법을 열거하는 것만으로, 메모리 사이즈의 해석에 관한 상세에는 들어가지 않습니다.
물품 쓰기
참고
본문
개별 개체의 사용 크기 보기
특정 오브젝트가 메모리를 크게 사용한다고 상정하고 있을 때, 실제로 어느 정도 사용하고 있는지 확인하고 싶은 것이 있습니다. 다음과 같은 용도입니다.
예를 들어,
itemMap
라는 개체에 대량의 값을 등록하는 Map 인스턴스가 있다고 가정합니다. HEAP SNAPSHOT
를 가져와서 Map 인스턴스에서 큰 인스턴스를 찾으면 해당 Map 인스턴스를 찾을 수 있습니다.Retained Size
를 계산하는 것이 매우 편리합니다.HEAP SNAPSHOT을 얻고 Map 인스턴스에서 큰 인스턴스를 찾는 YouTube 동영상을 준비했습니다. DevTools의 사용법을 모르는 분은 부디.
Google Chrome의 DevTools에서 Debug를 시작하는 방법은 Node.js 애플리케이션을 Google Chrome의 DevTools로 디버깅 - CLOVER을 참조하십시오.
전체 메모리 사용량 추세 보기
메모리 누수의 유무를 알고 싶을 때 알고 싶은 정보입니다.
process.memoryUsage()
Node.js 표준 API process.memoryUsage()를 사용합니다.
특히 추가 리소스가 필요하지 않으므로 소스를 변경할 수 있다면 가장 쉽습니다.
이 API를 사용하여 디버그 인쇄합니다.
예를 들어, 다음 소스 코드를 추가하면 5분 간격으로 메모리 사용량을 표준 출력으로 출력합니다.
// 定期的にメモリ使用量を吐き出す
setInterval(() => {
const used = process.memoryUsage()
const messages = []
for (let key in used) {
messages.push(`${key}: ${Math.round(used[key] / 1024 / 1024 * 100) / 100} MB`)
}
console.log(new Date(), messages.join(', '))
}, 5 * 60 * 1000)
로그의 예입니다.
2018-05-13T11:39:46.293Z 'rss: 315.79 MB, heapTotal: 253.01 MB, heapUsed: 239.41 MB, external: 0.22 MB'
2018-05-13T11:44:46.308Z 'rss: 355.88 MB, heapTotal: 267.43 MB, heapUsed: 254.4 MB, external: 0.31 MB'
2018-05-13T11:49:46.323Z 'rss: 324.54 MB, heapTotal: 256.04 MB, heapUsed: 242.81 MB, external: 0.23 MB'
2018-05-13T11:54:46.338Z 'rss: 359.49 MB, heapTotal: 271.09 MB, heapUsed: 257.61 MB, external: 0.36 MB'
2018-05-13T11:59:46.353Z 'rss: 346.75 MB, heapTotal: 262.74 MB, heapUsed: 248.15 MB, external: 0.28 MB'
2018-05-13T12:04:46.368Z 'rss: 316.83 MB, heapTotal: 252.87 MB, heapUsed: 239.29 MB, external: 0.2 MB'
memwatch-next
process.memoryUsage()
에서는 그 순간의 「사용하고 있는 오브젝트의 총 메모리량」은 취할 수 없습니다. process.memoryUsage()
는 요청한 순간의 메모리 사용량을 얻지만 그 순간이 Garbage Collection 실행 직후인지는 모릅니다. 즉, process.memoryUsage()
의 출력하는 값에는, 이미 사용하고 있지 않지만 해방되어 있지 않은 Garbage 오브젝트가 포함되어 있을 가능성이 있습니다.이 문제를 해결하기 위한 npm 패키지는 memwatch-next입니다. Node.js의 C 확장을 사용하여 Garbage Collection이 실행될 때 이벤트를 전달합니다. 이 이벤트를 사용하면, 정확한 「사용하고 있는 오브젝트의 총 메모리량」을 취득할 수 있습니다. 이것을 계속해서 취득해, 증가 경향이 있으면 메모리 누수의 유무를 검지할 수 있습니다.
설명을 읽은 것만으로는 실제로 사용하지 않습니다.
기타 참고
Reference
이 문제에 관하여(Node.js의 사용 메모리를 관찰하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ledsun/items/60ece250b96cac1af0f7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)