콘텐츠로 이동

samply - Firefox Profiler UI를 사용한 샘플링 프로파일러 치트시트

samply - Firefox Profiler UI를 사용한 샘플링 프로파일러 치트시트

samply는 macOS, Linux, Windows용 크로스 플랫폼 명령줄 샘플링 프로파일러입니다. 명령어 또는 실행 중인 프로세스의 스택 추적을 샘플링하고 (기본 ~1000 Hz) 결과를 Firefox Profiler 웹 UI에 제공합니다. Firefox Profiler는 화염 그래프, 스택 차트, 호출 트리, 스레드별 타임라인이 있는 성숙하고 대화형 프론트 엔드입니다. 네이티브 코드 (C/C++/Rust/Go) 및 표준 스택 정보를 내보내는 기타 언어를 프로파일하며, 코드 변경이 필요하지 않습니다.

설치

방법명령어
Cargocargo install --locked samply
바이너리GitHub Releases 페이지에서 다운로드
Linux perf 이벤트 접근sysctl kernel.perf_event_paranoid=1 필요할 수 있음 (또는 더 낮음)
검증samply --version

기본 사용법

명령어설명
samply record ./my-program args명령어 프로파일, UI 열기
samply record -- cargo run --release-- 후 프로파일 (플래그 전달)
samply record --pid 1234이미 실행 중인 프로세스 프로파일
samply load profile.json.gzUI에서 저장된 프로파일 재열기
samply --help전체 옵션 목록

레코딩 옵션

옵션설명
-r, --rate NHz 샘플링 속도 (기본 ~1000)
-o, --output FILE파일에 프로파일 저장
--save-only브라우저 UI 실행 없이 레코딩
-p, --pid PID실행 중인 프로세스에 연결
-d, --duration SECS고정 기간 프로파일
--reuse-threads일부 워크로드용 스레드 처리 조정
--그 후 모든 것은 명령어 + args

Firefox Profiler UI

레코딩 후 samply는 로컬 Firefox Profiler 보기를 엽니다. 주요 패널:

패널표시
Flame graph집계 스택 (시간 소비처)
Stack chartX축의 시간, 수직으로 쌓인 스택
Call tree자체/총계 시간을 포함한 상향식 / 하향식 계층
Marker chart시간 경과 이벤트 (있는 경우)
Timeline스레드별 활동; 범위 선택으로 초점 맞추기
UI 액션사용
시간 범위 선택실행의 일부로 분석 초점 맞추기
호출 스택 반전핫 리프 함수 찾기 (자체 시간)
검색함수 이름으로 호출 트리 필터
공유/내보내기프로파일 저장 또는 업로드

워크플로우 팁

목표접근
CPU 핫 경로 찾기레코드, 화염 그래프 열기, 넓은 프레임 찾기
특정 느린 단계 찾기타임라인에서 시간 범위 선택
빌드 비교프로파일 저장 및 나란히 로드
노이즈 감소디버그 정보로 릴리스 빌드 프로파일 (debug = true)

일반적인 워크플로우

# Rust 릴리스 빌드 프로파일 (디버그 정보로 심볼 유지)
samply record -- cargo run --release

# 실행 중인 서버를 20초 동안 프로파일
samply record --pid $(pgrep -n myserver) -d 20

# CI에서 헤드리스 레코드, 나중에 아티팩트 검사
samply record --save-only -o prof.json.gz ./bench
samply load prof.json.gz

samply vs 다른 프로파일러

측면samplyperf + FlameGraphhotspot
플랫폼macOS/Linux/WindowsLinuxLinux
UIFirefox Profiler (풍부)정적 SVGQt GUI
설정단일 바이너리여러 도구GUI 설치
최고의 용도크로스 플랫폼, 대화형스크립팅된 Linux 프로파일링Qt/perf GUI 사용자

리소스