피드로 돌아가기
Node.js BlogBackend
원문 읽기
Node.js 개발팀이 DTrace와 node-stackvis를 조합해 프로덕션 환경에서 CPU 시간 분포를 실시간 시각화
Profiling Node.js
AI 요약
Context
Node.js 애플리케이션의 성능 병목을 파악하기 위해 프로그램이 실행 시간을 어디에 소비하는지 측정할 방법이 필요했다.
Technical Solution
- DTrace를 이용한 스택 샘플링: 초당 약 100회 샘플링으로 60초 동안 모든 콜스택 수집 (profile-97 프로브 사용)
- node-stackvis 도구를 통한 변환: DTrace 출력값을 FlameGraph 형식의 SVG로 직접 변환
- FlameGraph 시각화: 박스 너비로 시간 소비량 표현, 세로 방향으로 콜 스택 깊이 표시
- 선택적 필터링: 특정 함수를 포함한 스택만 추출하기 위해 collapsed 형식으로 중간 변환 후 grep 사용
- C++ 심볼 디맹글링: c++filt 도구로 원본 DTrace 출력의 C++ 심볼 복원
Key Takeaway
DTrace와 FlameGraph 시각화는 프로덕션 환경에서 컴파일 오버헤드 최소화 상태로 동적 프로파일링을 수행할 수 있게 하며, 시각적 표현으로 엔지니어가 콜 스택의 시간 분포를 직관적으로 파악할 수 있다.
실천 포인트
Node.js 애플리케이션 성능 분석이 필요한 경우, illumos/SmartOS 환경에서 32비트 Node.js
0.
6.7 이상 버전에 --with-dtrace 옵션으로 빌드한 후 DTrace로 스택을 수집하고 node-stackvis로 FlameGraph를 생성하면 프로덕션 재시작 없이 CPU 시간 소비 패턴을 식별할 수 있다.