본문 바로가기
안드로이드

[안드로이드] 안드로이드 프로파일링 4가지 방법 (Android Profiling)

by 호군 2011. 12. 28.
반응형

⊙ 프로파일링이란?

범죄수사에서는 범죄 유형과 용의자 심리 분석 기법을 프로파일링 기법이라고 하는데, 프로그래밍에서도 어떤 메소드에서 얼마나 시간을 소모하는지 프로그램을 분석하는 방법을 프로파일링이라고 합니다.


⊙ 안드로이드 프로파일링 방법 소개

1. DDMS를 이용한 방법
2. dmtracedump tool을 이용한 방법
3. shell에서 명령어를 통한 방법
4. 코딩을 통한 방법 


⊙ 세부 안드로이드 프로파일링 방법
1. DDMS를 이용한 방법

1) 이클립스의 DDMS로 이동
2) 'Start Method Profiling'을 클릭하여 프로파일링 시작
3) 분석하고자 하는 동작 수행
  - logcat에 바로 출력됨
4) 'Stop Method Profiling'을 클릭하여 프로파일링 종료
  - 임시 trace파일 생성
  - 경로 : C:\Users\<user>\AppData\Local\Temp\ddms<*>.trace (os에 따라 다를 수 있음)
5) 임시 trace파일을 그래픽적으로 확인하려면, traceview tool로 trace파일 실행
  - C:\> traceview C:\Users\<user>\AppData\Local\Temp\ddms<*>.trace 
  - <user>는 자신의 user id이고, <*>는 특정 숫자이므로 모두 다릅니다. 꼭 확인하시고 하세요.



2. dmtracedump tool을 이용한 방법
1) 추후...


3. shell에서 명령어를 통한 방법

1) 에뮬레이터를 쓰신다면, command창에서 c:\> adb shell 을 입력하여 shell로 접근함.
2) 프로파일링 시작 명령어 입력
  # am profile <process id> start <trace file path>
3) 분석하고자 하는 동작 수행
  - trace 파일에 바로 써지지 않는 것 같음. 안 써진다고 당황하지 말 것! 
4) 프로파일링 종료 명령어 입력
  # am profile <process id> stop
5) <trace file path> 파일에 프로파일링 정보가 기록되어있음.
6) <trace file path> 파일을 Host PC로 가져옴.
7) trace파일을 그래픽적으로 확인하려면, traceview tool로 trace파일 실행
 
- C:\> traceview C:\Users\<user>\AppData\Local\Temp\ddms<*>.trace 
  - <user>는 자신의 user id이고, <*>는 특정 숫자이므로 모두 다릅니다. 꼭 확인하시고 하세요.


4. 코딩을 통한 방법 

1) sdcard가 꼭 필요함 (필수)
2) 소스코드에 프로파일링 시작 메소드를 호출
  - Debug.startMethodTracing("<trace file name>");
3) 소스코드에 프로파일링 종료 메소드를 호출
  - Debug.stopMethodTracing()
4) /sdcard/<trace file name>으로 trace파일이 생성됨.
6) /sdcard/<trace file name> 파일을 Host PC로 가져옴.
7) trace파일을 그래픽적으로 확인하려면, traceview tool로 trace파일 실행
 
- C:\> traceview C:\Users\<user>\AppData\Local\Temp\ddms<*>.trace 
  - <user>는 자신의 user id이고, <*>는 특정 숫자이므로 모두 다릅니다. 꼭 확인하시고 하세요.



⊙ traceview 이용한 분석 방법
profile 패널의 각 컬럼의 대략적인 의미는 다음과 같습니다
 - Name : 클래스의 메소드명, 맨 앞의 숫자는 메소드 호출 순서(call reference)
 - Inclusive : 해당 메소드 및 그것이 호출하는 메소드(자식메소드)를 포함한 수행시간.
 - Exclusive : 해당 메소드 자체 순수 수행시간(메소드는 여러번 수행될 수 있으며 이들을 모두 합친것임)
 - Calls : 전체 tracing 기록 중에서 몇번 호출되었는지.
 - Recur Calls : recursive call이 몇 번인지(?)
 - Time/Call : 해당 메소드 1번 호출 당 수행시간.
각 컬럼을 클릭하면 해당 컬럼 기준으로 정렬하여 볼 수 있습니다. 

 
또한 각 메소드를 선택하면 가지가 펼쳐지면서 Parents와 Children이 나타납니다.
 - Parents : 해당 메소드를 호출한 놈. caller
 - Children : 해당 메소드가 호출한 놈. callee
Children에서 self는 다른 메소드를 호출하지 않는 순수 자체 코드가 점유한 시간을 의미합니다.

- 자세한 분석방법은 여기로...


 

⊙ process id 를 확인하는 방법

1) shell에 procrank 명령어를 사용하여 확인
2) 만약 메모리에 대한 정보를 더 알고 싶다면, shell에 dumpsys meminfo <process id> 명령어를 사용하여 확인
3) 자세한 정보를 여기로...










 

반응형