핵심 요약
요청을 처리할수록 RSS가 계단식으로 오르고 안 떨어지면 누수다. 흔한 범인은 ① 무한히 자라는 전역 캐시/배열, ② 해제 안 한 이벤트 리스너·타이머, ③ 큰 객체를 붙잡는 클로저. --inspect로 힙 스냅샷을 두 번 떠 비교하면 늘어나는 객체가 보인다.
1. 추적 방법
node --inspect server.js
# Chrome chrome://inspect → Memory
# 1) 부하 전 스냅샷 2) 부하 후 스냅샷
# Comparison 뷰에서 #Delta 큰 항목 확인
2. 단골 원인
- 모듈 스코프
const cache = []에 계속 push, 비우지 않음 emitter.on()만 하고off()안 함 → 리스너 누적(MaxListeners 경고)setIntervalclear 누락
3. 함정
- GC 직후 잠깐 떨어지는 건 정상 — 추세(우상향)를 봐라
- 캐시는 크기 상한(LRU)을 둬라 — 무한 캐시는 누수와 같다
- 전역 변수에 요청 데이터 붙이기 금지(동시성+누수)
자주 묻는 질문
메모리가 오르다가 가끔 떨어지는데 누수인가요?
GC로 잠깐 내려가는 건 정상입니다. 장시간 추세가 계속 우상향이고 기준선 자체가 올라가면 누수입니다.
어디서 새는지 어떻게 좁히나요?
부하 전후 힙 스냅샷을 비교해 인스턴스 수가 비정상적으로 늘어난 생성자(Array, 특정 클래스, Closure)를 찾고, 그 객체를 붙잡는 retainer 경로를 따라가세요.

댓글 0