피드로 돌아가기
Dev.toBackend
원문 읽기
CPU는 한가한데 응답은 느린 Node.js, Slow I/O 추적법
Beyond the Event Loop: Tracking Slow I/O in Production Node.js
AI 요약
Context
CPU 사용률과 Event Loop 상태가 정상임에도 P99 Latency가 치솟는 현상 발생. 기존 프로파일러는 CPU-bound 작업만 감지하여 Async I/O 대기 시간을 식별하지 못하는 한계 존재. 네트워크 응답 및 DB 쿼리 대기 시간이라는 진단 사각지대 발생.
Technical Solution
- V8 Inspector Protocol 기반의 Chrome DevTools Protocol(CDP)을 사용하여 실행 중인 프로세스에 진단 코드 주입
http.request및https.request래핑을 통해 모든 외부 HTTP 요청의 Method, Target URL, 상태 코드, 소요 시간 추적dns.lookup함수 패칭으로 컨테이너 설정 오류나 DNS 서버 부하로 인한 호스트 이름 해석 지연 시간 측정net.Socket.prototype.connect계층의 몽키 패칭을 통해 DB 드라이버 종류와 무관하게 TCP 연결 단계의 병목 지점 식별Error().stack분석을 통해 느린 I/O를 유발한 구체적인 호출 스택 트레이스를 캡처하여 코드 레벨의 원인 파악- 설정된
io-threshold값을 초과하는 이벤트만 기록하여 불필요한 오버헤드를 줄이는 필터링 전략 적용
Impact
- DNS resolution 지연 시 최대 2초 소요 확인
- 내부 API 응답 시간이 50ms에서 800ms로 증가하는 사례 식별
- DB 연결 설정 문제로 인한 1.5초의 연결 지연 시간 포착
Key Takeaway
비동기 런타임에서 성능 최적화는 Event Loop의 점유율뿐 아니라 외부 리소스 대기 시간을 포함한 전체 Request Lifecycle 관점에서 접근해야 함.
실천 포인트
CPU 프로파일링 결과가 정상임에도 응답 지연이 지속되면, Network 및 DNS 계층의 Latency를 우선 점검할 것