heaptrack - Linux용 힙 메모리 프로파일러 치트시트
heaptrack (KDE)는 Linux용 힙 메모리 프로파일러입니다. 모든 메모리 할당을 추적하고 각각을 스택 추적으로 주석을 달아서 누수, 할당 핫스팟, 과도한 임시 할당, 피크 메모리 사용을 찾을 수 있습니다. 프로그램이 실행 중일 때 데이터 파일을 기록한 후, heaptrack_gui (풍부한 화염 그래프 및 차트) 또는 heaptrack_print (명령줄)로 분석합니다. 오버헤드는 현실적 워크로드에 충분히 낮습니다.
설치
| 플랫폼 | 명령어 |
|---|
| Debian/Ubuntu | sudo apt install heaptrack heaptrack-gui |
| Fedora | sudo dnf install heaptrack heaptrack-gui |
| Arch Linux | sudo pacman -S heaptrack heaptrack-qt |
| 소스에서 | KDE/heaptrack repo에서 빌드 (CMake) |
| 검증 | heaptrack --version |
레코딩
| 명령어 | 설명 |
|---|
heaptrack ./my-program args | 시작부터 명령어 프로파일 |
heaptrack -p PID | 실행 중인 프로세스에 연결 (GDB 기반) |
heaptrack -o out.zst ./prog | 특정 출력 파일에 쓰기 |
| 출력 | 현재 디렉토리에 heaptrack.PROG.PID.zst 생성 |
끝낼 때, heaptrack은 요약을 출력하고 기록된 데이터 파일의 경로를 인쇄합니다.
분석 (GUI)
heaptrack_gui heaptrack.my-program.12345.zst
| GUI 보기 | 표시 |
|---|
| 요약 | 피크 RSS, 총 할당, 누수 바이트 |
| 화염 그래프 | 호출 스택에 속성된 할당 |
| 상향식 / 하향식 | 할당별 호출 트리 |
| Caller/callee | 할당 관계 탐색 |
| 차트 | 시간에 따른 할당/누수/임시 |
분석 (CLI)
# 최상의 할당 핫스팟을 터미널에 인쇄
heaptrack_print heaptrack.my-program.12345.zst | less
| 메트릭 | 의미 |
|---|
| peak | 한 번에 유지된 최대 힙 메모리 |
| leaked | 할당되었지만 해제되지 않은 메모리 |
| allocations | 총 할당 수 (이탈) |
| temporary | 거의 즉시 해제된 할당 (낭비) |
| 옵션 | 설명 |
|---|
-a, --print-peak | 피크 메모리 소비자로 정렬 |
-l, --print-leaks | 누수 표시 |
-t, --print-temporary | 임시 할당 핫스팟 표시 |
-d, --diff FILE | 두 레코딩 비교 |
실행 비교 (Diff)
# 두 빌드/실행 간 변경 사항 보기
heaptrack_print -d before.zst after.zst
각 메트릭이 알려주는 것
| 증상 | 살펴보기 |
|---|
| 프로세스 RSS 계속 증가 | leaked — 할당되었지만 해제되지 않음 |
| 높은 할당자 CPU 비용 | allocations / temporary — 너무 많은 이탈 |
| 부하 하의 OOM | peak — 최대 동시 메모리 감소 |
| 시작 메모리 급증 | 관련 시간 범위의 화염 그래프 |
일반적인 워크플로우
# 서비스에서 누수 찾기
heaptrack ./myservice --run-workload
heaptrack_print -l heaptrack.myservice.*.zst | head -30
# 무거운 작업 중 피크 메모리 속성 (GUI가 가장 쉬움)
heaptrack ./batch-job
heaptrack_gui heaptrack.batch-job.*.zst # "peak" 화염 그래프 검사
# 핫 루프에서 임시 할당 이탈 감소
heaptrack_print -t heaptrack.*.zst | head
heaptrack vs 다른 메모리 도구
| 측면 | heaptrack | Valgrind (massif/memcheck) | 내장 할당자 |
|---|
| 오버헤드 | 낮음 | 높음 (memcheck 매우 높음) | 다양함 |
| 누수 탐지 | 예 | 예 (memcheck) | 부분 |
| 할당 이탈 | 예 (temporary) | massif는 피크에 초점 | 아니오 |
| UI | 풍부한 GUI + CLI | 텍스트 / massif-visualizer | 없음 |
| 최고의 용도 | 현실적 실행에서 빠른 힙 프로파일링 | 깊은 정확성 검사 | 빠른 검사 |
리소스