반응형
⊙ 프로파일링이란?
범죄수사에서는 범죄 유형과 용의자 심리 분석 기법을 프로파일링 기법이라고 하는데, 프로그래밍에서도 어떤 메소드에서 얼마나 시간을 소모하는지 프로그램을 분석하는 방법을 프로파일링이라고 합니다.
⊙ 안드로이드 프로파일링 방법 소개
1. DDMS를 이용한 방법
2. dmtracedump tool을 이용한 방법
3. shell에서 명령어를 통한 방법
4. 코딩을 통한 방법
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) '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이고, <*>는 특정 숫자이므로 모두 다릅니다. 꼭 확인하시고 하세요.
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이고, <*>는 특정 숫자이므로 모두 다릅니다. 꼭 확인하시고 하세요.
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)
- Name : 클래스의 메소드명, 맨 앞의 숫자는 메소드 호출 순서(call reference)
- Inclusive : 해당 메소드 및 그것이 호출하는 메소드(자식메소드)를 포함한 수행시간.
- Exclusive : 해당 메소드 자체 순수 수행시간(메소드는 여러번 수행될 수 있으며 이들을 모두 합친것임)
- Calls : 전체 tracing 기록 중에서 몇번 호출되었는지.
- Recur Calls : recursive call이 몇 번인지(?)
- Time/Call : 해당 메소드 1번 호출 당 수행시간.
각 컬럼을 클릭하면 해당 컬럼 기준으로 정렬하여 볼 수 있습니다.
- Exclusive : 해당 메소드 자체 순수 수행시간(메소드는 여러번 수행될 수 있으며 이들을 모두 합친것임)
- Calls : 전체 tracing 기록 중에서 몇번 호출되었는지.
- Recur Calls : recursive call이 몇 번인지(?)
- Time/Call : 해당 메소드 1번 호출 당 수행시간.
각 컬럼을 클릭하면 해당 컬럼 기준으로 정렬하여 볼 수 있습니다.
또한 각 메소드를 선택하면 가지가 펼쳐지면서 Parents와 Children이 나타납니다.
- Parents : 해당 메소드를 호출한 놈. caller
- Children : 해당 메소드가 호출한 놈. callee
Children에서 self는 다른 메소드를 호출하지 않는 순수 자체 코드가 점유한 시간을 의미합니다.
- 자세한 분석방법은 여기로...
- Parents : 해당 메소드를 호출한 놈. caller
- Children : 해당 메소드가 호출한 놈. callee
Children에서 self는 다른 메소드를 호출하지 않는 순수 자체 코드가 점유한 시간을 의미합니다.
- 자세한 분석방법은 여기로...
⊙ process id 를 확인하는 방법
1) shell에 procrank 명령어를 사용하여 확인
2) 만약 메모리에 대한 정보를 더 알고 싶다면, shell에 dumpsys meminfo <process id> 명령어를 사용하여 확인
3) 자세한 정보를 여기로...
2) 만약 메모리에 대한 정보를 더 알고 싶다면, shell에 dumpsys meminfo <process id> 명령어를 사용하여 확인
3) 자세한 정보를 여기로...
반응형
'안드로이드' 카테고리의 다른 글
[안드로이드] 안드로이드 빌드 시스템 (0) | 2012.03.05 |
---|---|
[안드로이드] Android.mk 사용하는 이미 정의된 문법 (0) | 2012.03.05 |
[안드로이드] Android의 framework에 resource 추가하기 (0) | 2012.02.14 |
[안드로이드] Target Board에 App 설치 및 실행하기 (0) | 2012.01.11 |
[안드로이드] 특정 App의 Main Activity 실행하기 (0) | 2012.01.10 |
[안드로이드] adb를 사용하여 app 실행하기 (0) | 2011.12.22 |
안드로이드의 Touch Event 디스패치 단계 (0) | 2011.12.13 |
[안드로이드] HttpClient 에 Timeout 설정하기 (0) | 2011.10.25 |
[안드로이드] OutOfMemory 왜 발생하는거야? (2) | 2011.10.24 |
[Android 문서번역] Avoiding Memory Leaks (메모리 누수를 피하는 방법) (0) | 2011.10.23 |