콘텐츠로 이동

Bytehound - Linux용 메모리 프로파일러 치트시트

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 DATAheaptrack 도구로 변환
REST API할당을 프로그래밍 방식으로 쿼리
스크립팅데이터 세트에 대한 사용자 정의 분석

오버헤드 감소

설정효과
임시 할당 제거훨씬 더 작은 출력, 더 적은 소음
기본적으로 비활성화 + 코드에서 활성화흥미로운 단계만 프로파일
더 짧은 실행데이터 파일이 빠르게 증가

Bytehound vs 다른 메모리 프로파일러

측면BytehoundheaptrackValgrind massifjemalloc prof
오버헤드낮음낮음매우 높음매우 낮음
UI풍부한 웹 UIQt GUI텍스트/시각화텍스트 + 도구
필터링우수좋음제한제한
설정LD_PRELOADheaptrack ./progvalgrind --tool=massif할당자 설정
최적 대상대화형 탐색빠른 힙 프로파일링심층 정확도프로덕션 샘플링

유사한 낮은 오버헤드 접근을 위해 heaptrack와 비교합니다; 모두 현실적인 워크로드에서 Valgrind을 이깁니다.

리소스