Bytehound - Linux용 메모리 프로파일러 치트시트
Bytehound는 프로그램에서 모든 할당 및 할당 해제를 추적하고 결과를 비정상적으로 좋은 웹 UI에 표시하는 Linux용 메모리 프로파일러입니다. 누수를 찾는 것 외에도 시간에 따른 할당 변화, 호출 스택으로 그룹화된 할당을 표시하고 대화형 필터링을 허용합니다 — “이 모듈에서 1MB보다 크고 해제되지 않은 할당을 표시합니다.” Rust 기반 도구로 LD_PRELOAD를 통해 모든 네이티브 프로그램 (C, C++, Rust)과 작동합니다.
설치
| 방법 | 방법 |
|---|
| 릴리스 | GitHub Releases에서 bytehound + libbytehound.so 다운로드 |
| 소스에서 | 리포지토리에서 cargo build --release |
| 요구사항 | Linux x86-64; 심볼이 있는 프로그램 (-g) |
| 확인 | ./bytehound --version |
프로그램 프로파일링
# 프로파일러를 사전로드하고 프로그램 실행
LD_PRELOAD=./libbytehound.so ./my-program
# 이는 memory-profiling_*.dat를 생산합니다
| 변수 | 목적 |
|---|
LD_PRELOAD=./libbytehound.so | 할당자 후크 주입 |
MEMORY_PROFILER_OUTPUT | 출력 파일 경로 |
MEMORY_PROFILER_LOG=warn | 로그 수준 |
MEMORY_PROFILER_CULL_TEMPORARY_ALLOCATIONS | 단기 할당 소음 감소 |
MEMORY_PROFILER_DISABLE_BY_DEFAULT | 일시 중지 상태로 시작, 프로그래밍 방식으로 활성화 |
결과 보기
# 캡처된 데이터에서 웹 UI 시작
./bytehound server memory-profiling_*.dat
# → http://localhost:8080 열기
| 보기 | 표시 |
|---|
| 그래프 | 시간에 따른 메모리 사용량 (라이브, 누수, 할당) |
| 할당 | 스택, 크기, 수명이 있는 모든 할당 |
| 플레임 그래프 | 할당 부피가 호출 스택에 속함 |
| 누수 | 해제되지 않은 할당 |
| 필터링 | 대화형 쿼리 빌더 |
필터링 언어
Bytehound의 강점은 데이터를 분할하는 것입니다:
| 필터 | 찾기 |
|---|
| 누수만 | 종료 시 살아 있는 할당 |
| 크기 범위 | 예. > 1 MiB |
| 수명 | 단기 (변화) vs 장기 |
| 백트레이스 포함 | 특정 함수/모듈의 할당 |
| 시간 범위 | 창 중 할당 |
# 개념적: 파서 모듈에서 1MB 이상의 누수된 할당
leaked AND size > 1048576 AND backtrace contains "parser::"
찾을 것
| 증상 | 조사 |
|---|
| RSS가 제한 없이 증가 | ”누수” 보기 — 해제되지 않은 할당 |
| 할당자의 높은 CPU | 임시 할당 변화 |
| 한 순간의 메모리 스파이크 | 스파이크 주변 시간 범위 필터 |
| 하나의 함수 지배 | 할당 플레임 그래프 |
| 단편화 | 많은 작은 장기 할당 |
분석 스크립트하기
Bytehound는 자동화용 API 및 CLI를 노출합니다:
| 명령어 | 목적 |
|---|
bytehound server DATA | 대화형 UI |
bytehound export-heaptrack DATA | heaptrack 도구로 변환 |
| REST API | 할당을 프로그래밍 방식으로 쿼리 |
| 스크립팅 | 데이터 세트에 대한 사용자 정의 분석 |
오버헤드 감소
| 설정 | 효과 |
|---|
| 임시 할당 제거 | 훨씬 더 작은 출력, 더 적은 소음 |
| 기본적으로 비활성화 + 코드에서 활성화 | 흥미로운 단계만 프로파일 |
| 더 짧은 실행 | 데이터 파일이 빠르게 증가 |
Bytehound vs 다른 메모리 프로파일러
| 측면 | Bytehound | heaptrack | Valgrind massif | jemalloc prof |
|---|
| 오버헤드 | 낮음 | 낮음 | 매우 높음 | 매우 낮음 |
| UI | 풍부한 웹 UI | Qt GUI | 텍스트/시각화 | 텍스트 + 도구 |
| 필터링 | 우수 | 좋음 | 제한 | 제한 |
| 설정 | LD_PRELOAD | heaptrack ./prog | valgrind --tool=massif | 할당자 설정 |
| 최적 대상 | 대화형 탐색 | 빠른 힙 프로파일링 | 심층 정확도 | 프로덕션 샘플링 |
유사한 낮은 오버헤드 접근을 위해 heaptrack와 비교합니다; 모두 현실적인 워크로드에서 Valgrind을 이깁니다.
리소스