피드로 돌아가기
Profiling Node.js
Node.js BlogNode.js Blog
Backend

Node.js 개발팀이 DTrace와 node-stackvis를 조합해 프로덕션 환경에서 CPU 시간 분포를 실시간 시각화

Profiling Node.js

2012년 4월 25일7intermediate

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 시간 소비 패턴을 식별할 수 있다.

원문 읽기