안드로이드의 systrace는 시스템 성능을 분석하기 위한 툴입니다. 안드로이드 플랫폼에는 atrace라는 모듈이 있는데, systrace는 이 모듈에 trace를 추출하도록 요청합니다. 파일로 trace가 추출되면, Chrome 브라우저에서 결과를 확인할 수 있습니다.
툴을 설치하고, trace 추출 및 확인하는 방법에 대해서 알아보겠습니다.
설치
systrace 툴은 systrace.py라는 파이썬 스크립트입니다. 안드로이드 스튜디오에서 SDK를 다운받으면 그 안에 들어있습니다.
저는 Sdk라는 폴더에 SDK를 다운받았습니다. platform-tools/systrace
에 들어가시면 systrace.py
라는 파일이 있습니다.
Sdk/platform-tools/systrace$ ls
catapult mytrace.html NOTICE systrace.py UPSTREAM_REVISION
이 파일은 python2.7로 작성되었기 때문에 python2.7을 사전에 설치하셔야 합니다.
Trace 추출
디바이스를 PC에 연결했다면 이 스크립트를 이용하여 trace를 추출할 수 있습니다.
명령어는 다음과 같은 형식으로 입력하시면 됩니다.
$ python systrace.py [options] [categories]
아래와 같이 명령어를 입력하시면 trace가 추출됩니다. -o
옵션은 추출되는 파일명을 지정하는 것이고, -t
옵션은 추출할 trace의 시간(초)를 설정합니다.
옵션 다음으로 category를 입력하시면 되는데, category는 trace를 추출할 프레임워크 또는 모듈의 정보를 의미합니다.
$ python systrace.py -o mytrace.html -t 5 sched freq idle am wm gfx view input res
위의 명령어를 실행하면 5초간 trace 정보가 추출되고 mytrace.html이라는 파일에 저장이됩니다.
설정한 category에 대한 설명은 다음 명령어로 확인이 가능합니다. 디바이스에서 지원하는 category를 출력하고 어떤 것에 대한 내용인지 알려줍니다.
Sdk/platform-tools/systrace$ python systrace.py --list-categories
gfx - Graphics
input - Input
view - View System
webview - WebView
wm - Window Manager
am - Activity Manager
sm - Sync Manager
audio - Audio
video - Video
camera - Camera
hal - Hardware Modules
res - Resource Loading
dalvik - Dalvik VM
rs - RenderScript
bionic - Bionic C Library
power - Power Management
pm - Package Manager
ss - System Server
database - Database
network - Network
adb - ADB
vibrator - Vibrator
aidl - AIDL calls
pdx - PDX services
sched - CPU Scheduling
irq - IRQ Events
i2c - I2C Events
freq - CPU Frequency
idle - CPU Idle
disk - Disk I/O
sync - Synchronization
workq - Kernel Workqueues
memreclaim - Kernel Memory Reclaim
binder_driver - Binder Kernel driver
binder_lock - Binder global lock trace
Trace 확인
Trace는 Chrome 브라우저에서 확인할 수 있습니다. 브라우저를 열고 URL에 chrome://tracing/
를 입력하면 trace viewer 창으로 이동합니다.
Load
버튼을 누르고 위에서 추출한 mytrace.html
을 선택해주세요. 그럼 다음과 같이 trace 결과를 확인할 수 있습니다.
간단한 단축키를 알려드리면
- a: 왼쪽으로 시간축 이동
- d: 오른쪽으로 시간축 이동
- w: 화면에 더 적은시간이 보이게(확대)
- s: 화면에 더 많은 시간이 보이게(축소)
- 위 아래 이동은 마우스 휠로 하세요.
항목을 눌러보면 작업이 걸린 전체 시간이 나옵니다. 또한 CPU Usage 등 스케쥴링에 대한 정보를 볼 수 있습니다.
정리
Systrace를 이용하여 시스템 성능을 분석할 수 있는 방법에 대해서 알아보았습니다. 앱 개발자는 안드로이드 스튜디오의 프로파일 기능만으로 충분할 것 같습니다. 하지만 시스템 측면에서 어떻게 동작하는지 보고 싶다면 systrace가 유용할 수 있습니다.
참고
Related Posts
- Android 14 - 사진/동영상 파일, 일부 접근 권한 소개
- Android - adb push, pull로 파일 복사, 다운로드
- Android 14 - 암시적 인텐트 변경사항 및 문제 해결
- Jetpack Compose - Row와 Column
- Android 13, AOSP 오픈소스 다운로드 및 빌드
- Android 13 - 세분화된 미디어 파일 권한
- Android 13에서 Notification 권한 요청, 알림 띄우기
- Android 13에서 'Access blocked: ComponentInfo' 에러 해결
- 에러 해결: android gradle plugin requires java 11 to run. you are currently using java 1.8.
- 안드로이드 - 코루틴과 Retrofit으로 비동기 통신 예제
- 안드로이드 - 코루틴으로 URL 이미지 불러오기
- Android - 진동, Vibrator, VibrationEffect 예제
- Some problems were found with the configuration of task 에러 수정
- Query method parameters should either be a type that can be converted into a database column or a List
- 우분투에서 Android 12 오픈소스 다운로드 및 빌드
- Android - ViewModel을 생성하는 방법
- Android - Transformations.map(), switchMap() 차이점
- Android - Transformations.distinctUntilChanged() 소개
- Android - TabLayout 구현 방법 (+ ViewPager2)
- Android - 휴대폰 전화번호 가져오는 방법
- Android 12 - Splash Screens 알아보기
- Android 12 - Incremental Install (Play as you Download) 소개
- Android - adb 명령어로 bugreport 로그 파일 추출
- Android - adb 명령어로 App 데이터 삭제
- Android - adb 명령어로 앱 비활성화, 활성화
- Android - adb 명령어로 특정 패키지의 PID 찾기
- Android - adb 명령어로 퍼미션 Grant 또는 Revoke
- Android - adb 명령어로 apk 설치, 삭제
- Android - adb 명령어로 특정 패키지의 프로세스 종료
- Android - adb 명령어로 screen capture 저장
- Android - adb 명령어로 System 앱 삭제, 설치
- Android - adb 명령어로 settings value 확인, 변경
- Android 12 - IntentFilter의 exported 명시적 선언
- Android - adb 명령어로 공장초기화(Factory reset)
- Android - adb logcat 명령어로 로그 출력