테스트 기기에서 프로필을 가져오거나 백엔드에서 다운로드한 후 Perfetto UI에서 파일을 열어 타임라인, 스레드 상태, 메모리 보관 그래프를 검사할 수 있습니다. 이 페이지에서는 ProfilingManager로 캡처된 수정된 시스템 트레이스 및 Java 힙 덤프를 탐색하는 방법을 설명합니다.
시스템 트레이스 시각화
Perfetto UI에서 .perfetto-trace 파일을 열어 시간 경과에 따른 CPU 및 스레드 활동을 검사합니다.

사용자 개인 정보 보호를 위해 ProfilingManager는 다른 모든 프로세스의 CPU 활동을 단일 OtherProcesses 트랙으로 결합하여 시스템 트레이스를 수정합니다.
이 결합된 트랙을 검사하면 앱의 속도 저하가 내부 병목 현상으로 인한 것인지 아니면 전체 기기 부하로 인한 것인지 확인할 수 있습니다.
그림 2는 수정된 시스템 트레이스의 주요 섹션을 보여줍니다.
- CPU 목록: 기기에서 사용 가능한 모든 프로세서를 표시합니다.
- CPU tasks: 각 CPU가 실행 중인 스레드를 표시합니다.
- 기타 프로세스 뷰: 다른 프로세스에서 소비하는 CPU 리소스를 표시합니다.
- Process View: 앱의 프로세스를 표시합니다.
- 스레드 뷰: 프로세스 내에서 실행 중인 스레드와 스레드 상태(실행 가능(R), 실행 중(R), 일시정지(S), 중단 불가능한 일시정지(D))를 표시하며, 이는 Linux 프로세스 상태에 직접 매핑됩니다.
- 트레이스 슬라이스: 이 섹션에는 앱 개발자 또는 프레임워크에서 추가한 트레이스 주석이 표시됩니다. 이러한 주석은
Trace.beginSection와Trace.endSection간의 계산을 포함합니다.
Perfetto UI 및 트레이스 시각화에 관한 자세한 내용은 Perfetto 문서를 참고하세요.
Java 힙 덤프 시각화
PROFILING_TYPE_JAVA_HEAP_DUMP를 사용하여 Java 힙 덤프를 캡처한 후 Perfetto UI에서 결과 .perfetto-java-heap-dump 파일을 열어 메모리 누수를 식별하거나 메모리 사용량을 최적화합니다. Heapdump Explorer에서 힙 그래프를 탐색하고, 누적 객체 크기의 Flame 그래프를 검사하고, 클래스, 객체, 도미네이터를 탐색할 수 있습니다(그림 3 참고).

ProfilingManager 힙 덤프와 HPROF 덤프의 차이점
표준 .hprof 힙 덤프(예: Debug.dumpHprofData 또는 Android 스튜디오에서 캡처한 힙 덤프)와 달리 ProfilingManager는 Perfetto ART 힙 덤프(.perfetto-java-heap-dump)를 캡처합니다. ProfilingManager는 원시 메모리 콘텐츠를 덤프하는 대신 객체 보관 그래프 및 크기 조정 메타데이터를 기록하고 객체 내부에 저장된 원시 데이터는 생략합니다.
- 수집되는 정보:
- 클래스 및 유형: 클래스 이름, 슈퍼클래스 계층 구조, 클래스 로더, 인스턴스 크기, 참조 유형(예: 일반 클래스, 배열, 문자열 또는 약한 참조, 소프트 참조, 파이널라이저 참조, 팬텀 참조)
- 객체 인스턴스 및 크기: 각 객체의 Shallow Size(
self_size), 힙 영역(HEAP_TYPE_APP,HEAP_TYPE_ZYGOTE또는HEAP_TYPE_BOOT_IMAGE),NativeAllocationRegistry를 통해 등록된 연결된 네이티브 메모리입니다. - 참조 및 GC 루트: 가비지 컬렉션 루트(예: JNI 전역 및 로컬, Java 스택 프레임, 스레드 객체) 및 어떤 객체가 어떤 필드 이름을 통해 다른 객체를 유지하는지 보여주는 필드 수준 참조 체인입니다.
- 크기 조정 메타데이터 선택: 특정 프레임워크 유형에 대한 민감하지 않은 메타데이터(예:
Bitmap측정기준(mWidth및mHeight))입니다.
- 생략된 항목: 실제 기본 필드 값,
String문자 콘텐츠, 원시 배열 페이로드(byte[],char[], 기타 기본 배열) 원시 객체 콘텐츠를 생략하면 프로덕션 기기에서 사용자 개인 정보 보호가 가능하고 덤프 파일이 훨씬 작아집니다.
다음 단계
Perfetto UI에서 시각적으로 검사하는 것 외에도 PerfettoSQL로 프로필을 쿼리하거나, 트레이스를 일괄 분석하거나, AI로 프로필을 분석할 수 있습니다.