트레이스 기록

트레이스 기록을 시작하려면 CPU 프로파일러 위나 아래의 드롭다운 메뉴에서 기록 구성을 선택하고 Record를 클릭하세요.

그림 1. CPU 프로파일러에 진행 중인 기록의 상태, 기간, 유형이 표시됩니다.

앱과 상호작용한 다음 완료되면 Stop을 클릭하세요. 그림 2와 같이 프로파일러의 트레이스 창에 트레이스 정보가 자동으로 표시됩니다.

그림 2. 메서드 트레이스를 기록한 후의 CPU 프로파일러

  1. 선택된 기간: 기록된 시간 중 트레이스 창에서 검사할 부분을 결정합니다. 처음으로 트레이스를 기록하는 경우 CPU 프로파일러가 CPU 타임라인에서 기록의 전체 길이를 자동으로 선택합니다. 기록된 기간의 일부분에 관한 트레이스 데이터만 검사하려면 강조표시된 영역의 가장자리를 드래그하세요.
  2. 상호작용 섹션: 사용자 상호작용 및 앱 수명 주기 이벤트를 타임라인을 따라 표시합니다.
  3. 스레드 섹션: 타임라인을 따라 모든 스레드의 스레드 상태 활동 (예: 실행 중, 일시정지 등) 및 호출 차트 (또는 시스템 트레이스의 트레이스 이벤트 차트)가 표시됩니다.
    • 마우스 및 단축키를 사용하여 타임라인을 탐색합니다.
    • 스레드 이름을 더블클릭하거나 스레드를 선택한 상태에서 Enter 키를 눌러 스레드를 펼치거나 접습니다.
    • 스레드를 선택하여 Analysis 창에서 추가 정보를 확인합니다. Shift 키나 Ctrl 키(Mac의 경우 Command)를 누른 상태에서 여러 스레드를 선택할 수 있습니다.
    • Analysis 창에서 추가 정보를 보려면 메서드 호출 (또는 시스템 트레이스에서 트레이스 이벤트)을 선택합니다.
  4. Analysis 창: 선택한 기간 및 스레드 또는 메서드 호출에 관한 트레이스 데이터를 표시합니다. 이 창에서 각 스택 트레이스를 보는 방법(분석 탭 사용) 및 실행 시간을 측정하는 방법(시간 참조 드롭다운 메뉴 사용)을 선택할 수 있습니다.
  5. Analysis 창 탭: 트레이스 세부정보를 표시하는 방법을 선택합니다. 각 옵션에 관한 자세한 내용은 트레이스 검사를 참고하세요.
  6. 시간 참조 메뉴: 다음 중 하나를 선택하여 각 호출의 타이밍 정보가 측정되는 방법을 결정합니다 (자바 메서드 샘플링/트레이스에서만 지원됨).
    • Wall clock time: 타이밍 정보가 실제 경과 시간을 나타냅니다.
    • Thread time: 타이밍 정보가 실제 경과 시간에서 스레드가 CPU 리소스를 소비하지 않는 시간을 뺀 시간을 나타냅니다. 주어진 호출의 스레드 시간은 항상 실제 경과 시간보다 작거나 같습니다. 스레드 시간을 사용하면 주어진 메서드나 함수에 의해 소비되는 스레드의 실제 CPU 사용량을 더 효과적으로 파악할 수 있습니다.
  7. 필터: 함수, 메서드, 클래스 또는 패키지 이름을 기준으로 트레이스 데이터를 필터링합니다. 예를 들어 특정 호출과 관련된 트레이스 데이터를 빠르게 식별하려면 검색 필드에 이름을 입력합니다. Flame Chart 탭에서 검색어와 일치하는 호출, 패키지 또는 클래스가 포함된 호출 스택이 강조됩니다. Top downBottom up 탭에서 이러한 호출 스택은 다른 트레이스 결과보다 우선합니다. 검색 필드 옆에서 해당하는 체크박스를 선택하여 다음 옵션을 사용 설정할 수도 있습니다.
    • Regex: 검색에 정규 표현식을 포함하려면 이 옵션을 사용하세요.
    • Match case: 검색에서 대소문자를 구분하는 경우 이 옵션을 사용하세요.
팁: Threads 타임라인을 검사할 때 다음 단축키를 사용할 수 있습니다.
  • 확대: Ctrl 키(Mac의 경우 Command)를 누른 상태에서 W 키를 누르거나 마우스 휠을 스크롤합니다.
  • 축소: Ctrl (Mac의 경우 Command)을 누른 상태에서 S 키를 누르거나 마우스 휠을 뒤로 스크롤합니다.
  • 왼쪽으로 이동: 스페이스바를 누른 상태에서 A 키를 누르거나 마우스를 오른쪽으로 드래그합니다.
  • 오른쪽으로 이동: 스페이스바를 누른 상태에서 D 키를 누르거나 마우스를 왼쪽으로 드래그합니다.
  • 스레드 펼치기 또는 접기: 스레드 이름을 더블클릭하거나 스레드를 선택한 상태에서 Enter 키를 누릅니다.

기록 구성 선택

트레이스 정보 기록을 시작하려면 캡처할 프로파일링 정보에 적절한 기록 구성을 선택하세요.

  • 자바 메서드 샘플링: 앱의 자바 기반 코드가 실행되는 동안 앱의 호출 스택을 자주 캡처합니다. 프로파일러는 캡처된 데이터 세트를 비교하여 앱의 자바 기반 코드 실행에 관한 타이밍 및 리소스 사용 정보를 얻습니다.

    샘플 기반 추적에 내재된 문제는 앱에서 호출 스택의 캡처 후에 메서드를 시작하고 다음 캡처 전에 메서드를 종료하는 경우 메서드 호출이 프로파일러에 의해 기록되지 않는다는 점입니다. 이렇게 수명 주기가 짧은 메서드를 추적하는 데 관심이 있으면 계측된 추적을 사용해야 합니다.

  • 자바 메서드 추적: 각 메서드 호출의 시작과 끝에서 타임스탬프를 기록하기 위해 런타임에 앱을 계측합니다. 타이밍 정보와 CPU 사용량 등 메서드 추적 데이터를 생성하기 위해 타임스탬프가 수집, 비교됩니다.

    각 메서드의 계측과 관련된 오버헤드가 런타임 성능에 영향을 미치며 프로파일링 데이터에 영향을 미칠 수도 있습니다. 수명 주기가 상대적으로 짧은 메서드의 경우 훨씬 더 두드러집니다. 또한, 앱에서 단기간에 많은 수의 메서드를 실행하는 경우 프로파일러가 빠르게 파일 크기 한도를 초과하고 더 이상 추적 데이터를 기록하지 못할 수도 있습니다.

  • C/C++ 함수 샘플링: 앱의 네이티브 스레드의 샘플링된 트레이스를 캡처합니다. 이 구성을 사용하려면 Android 8.0(API 수준 26) 이상을 실행하는 기기에 앱을 배포해야 합니다.

    내부적으로 이 구성에서는 simpleperf를 사용하여 앱의 네이티브 코드를 트레이스합니다. 특정 기기 CPU를 샘플링하거나 샘플링 기간을 매우 정확하게 지정하는 등 simpleperf의 추가 옵션을 지정하려면 명령줄에서 simpleperf를 사용하면 됩니다.

  • 시스템 호출 추적: 앱이 시스템 리소스와 상호작용하는 방법을 검사할 수 있는 세부정보를 캡처합니다. 스레드 상태의 정확한 타이밍과 기간을 검사하고, 모든 코어에서 CPU 병목 현상의 위치를 시각화하고, 분석할 맞춤 트레이스 이벤트를 추가할 수 있습니다. 성능 문제를 해결하는 경우 이러한 정보가 중요할 수 있습니다. 이 구성을 사용하려면 Android 7.0(API 수준 24) 이상을 실행하는 기기에 앱을 배포해야 합니다.

    이 트레이스 구성을 사용하는 동안 코드를 계측하여 프로파일러 타임라인에서 중요한 코드 루틴을 시각적으로 표시할 수 있습니다. C/C++ 코드를 계측하려면 trace.h에서 제공하는 네이티브 추적 API를 사용하세요. 자바 코드를 계측하려면 Trace 클래스를 사용합니다. 자세한 내용은 앱 코드 계측을 참고하세요.

    이 트레이스 구성은 systrace를 기반으로 구축됩니다. systrace 명령줄 유틸리티를 사용하여 CPU 프로파일러에 제공된 것 이외의 옵션을 지정할 수 있습니다. systrace에서 제공하는 추가 시스템 수준 데이터는 네이티브 시스템 프로세스를 검사하고 삭제되거나 지연된 프레임 문제를 해결하는 데 도움이 됩니다.

    Android 9 (API 수준 28) 이상을 실행하는 기기에서는 시스템 추적이라는 시스템 앱을 사용하여 기기에서 시스템 트레이스를 기록할 수 있습니다.

기록 구성 만들기, 수정 또는 보기

CPU 프로파일러 상단의 기록 구성 드롭다운 메뉴에서 Edit configurations를 선택하여 열리는 CPU Recording Configurations 대화상자에서 기록 구성을 만들고 수정하고 확인할 수 있습니다.

기존 기록 구성의 설정을 보려면 CPU Recording Configurations 대화상자의 왼쪽 창에서 선택하세요.

새 기록 구성을 만들려면 다음 단계를 따르세요.

  1. 대화상자의 왼쪽 상단에서 Add 를 클릭합니다. 이렇게 하면 기본 설정을 사용하여 새로운 구성이 만들어집니다.
  2. 구성의 이름을 지정합니다.
  3. Trace Technology를 선택합니다.
  4. 샘플링된 기록 구성의 경우 Sampling interval을 마이크로초(μs) 단위로 지정합니다. 이 값은 앱의 각 호출 스택 샘플 사이의 시간을 나타냅니다. 더 짧은 간격을 지정할수록 기록된 데이터의 파일 크기 한도에 더 빠르게 도달할 수 있습니다.
  5. 연결된 기기에 기록되는 데이터의 File size limit를 메가바이트(MB) 단위로 지정합니다. 기록을 중지하면 Android 스튜디오가 이 데이터를 파싱하여 프로파일러 창에 표시합니다. 따라서, 한도를 늘리고 많은 양의 데이터를 기록하면 Android 스튜디오가 파일을 파싱하는 데 훨씬 더 오래 걸리고 응답하지 못하게 될 수도 있습니다.

    참고: Android 8.0(API 수준 26) 이상을 실행하는 연결된 기기를 사용하는 경우 트레이스 데이터의 파일 크기에 제한이 없으며 이 값이 무시됩니다. 하지만 각 기록 후 기기에서 수집하는 데이터의 양에 주의해야 합니다. Android 스튜디오가 큰 트레이스 파일을 파싱하는 데 어려움이 있을 수 있습니다. 예를 들어, 앱에서 단기간에 많은 메서드를 호출하는 동안 샘플링 간격이 짧은 샘플링된 트레이스 또는 계측된 트레이스를 기록하는 경우 큰 트레이스 파일이 신속하게 생성됩니다.

  6. 변경사항을 수락하고 계속해서 다른 구성을 변경하려면 Apply를 클릭합니다. 적용된 변경사항을 모두 수락하고 대화상자를 닫으려면 OK를 클릭합니다.

Debug API를 사용하여 CPU 활동 기록

앱에서 Debug API를 사용하여 CPU 프로파일러에서 CPU 활동 기록을 시작하고 중지할 수 있습니다.

앱에서 startMethodTracing(String tracePath)을 호출하면 CPU 프로파일러가 기록을 시작하고 stopMethodTracing()을 호출하면 기록을 중지합니다. 이 API를 사용하여 트리거된 CPU 활동을 기록하는 동안, CPU 프로파일러는 Debug API를 활성 CPU 기록 구성으로 표시합니다.

Debug API를 사용하여 CPU 활동 기록을 관리하려면 Android 8.0(API 수준 26) 이상을 실행하는 기기에 계측된 앱을 배포하세요. API에서 시작된 기록은 프로파일링 가능한 앱에서 지원되지만 Android 스튜디오 프로파일러에서는 UI에 기록 상태를 표시하기 위해 디버그 가능한 앱이 필요합니다.

중요: Debug API는 CPU 프로파일러 그래픽 사용자 인터페이스의 버튼, 앱 시작 시 자동 기록을 위한 기록 구성의 설정 등 CPU 활동 기록을 시작하고 중지하기 위한 다른 수단과 별도로 사용하기 위한 것입니다.

Debug API의 startMethodTracing(String tracePath) 메서드는 8MB의 버퍼 사이즈 한도로 인해 기록을 수동으로 시작/중지하기 어려운 짧은 간격 또는 시나리오를 위해 설계되었습니다. 기록이 더 긴 경우 Android 스튜디오의 프로파일러 UI를 사용하세요.

자세한 내용은 앱을 계측하여 트레이스 로그 생성을 참고하세요.

앱이 시작하는 동안 CPU 활동 기록

앱이 시작하는 동안 CPU 활동을 자동으로 기록하려면 다음 단계를 따르세요.

  1. Run > Edit Configurations를 선택합니다.
  2. Profiling 탭에서 Start recording a method trace on startup 옆의 체크박스를 선택합니다.
  3. 메뉴에서 CPU 기록 구성을 선택합니다.
  4. Apply를 클릭합니다.
  5. Run > Profile을 선택하여 Android 8.0(API 수준 26) 이상을 실행하는 기기에 앱을 배포합니다.