Skip to content

메모리

이 문서에서는 메모리 관련 문제를 디버깅하는 방법에 대해 알아볼 수 있습니다.

내 프로세스에서 메모리가 부족합니다

Node.js(JavaScript)는 가비지 수집 언어이므로, 리테이너를 통해 메모리 누수가 발생할 수 있습니다. Node.js 애플리케이션은 일반적으로 멀티 테넌트, 비즈니스 크리티컬 및 장기 실행되기 때문에 메모리 누수를 찾을 수 있는 접근 가능하고 효율적인 방법을 제공하는 것이 필수적입니다.

증상

사용자는 지속적으로 증가하는 메모리 사용량(며칠 또는 몇 주에 걸쳐 빠르거나 느릴 수 있음)을 관찰한 다음 프로세스가 충돌하고 프로세스 관리자에 의해 재시작되는 것을 확인합니다. 프로세스가 이전보다 느리게 실행되고 재시작으로 인해 일부 요청이 실패할 수 있습니다(로드 밸런서가 502로 응답).

부작용

  • 메모리 고갈로 인한 프로세스 재시작 및 요청 삭제
  • 증가된 GC 활동은 더 높은 CPU 사용량과 느린 응답 시간으로 이어짐
    • 이벤트 루프를 차단하는 GC로 인해 느려짐
  • 증가된 메모리 스왑은 프로세스(GC 활동) 속도를 늦춤
  • 힙 스냅샷을 얻기에 충분한 가용 메모리가 없을 수 있음

내 프로세스에서 메모리를 비효율적으로 사용합니다

증상

애플리케이션이 예상치 못한 많은 메모리를 사용하거나 가비지 컬렉터 활동이 증가하는 것을 관찰합니다.

부작용

  • 페이지 폴트 횟수 증가
  • 더 높은 GC 활동 및 CPU 사용량