반응형

출처 :  http://webkebi.zany.kr:9003/board/bView.asp?bCode=91179649&aCode=2511&cBlock=0&cPageNo=1&sType=0&sString


-----------------------------------------------------
- ■ 관련 명령어 요약 (아래 상세 설명에서 나오는 명령어들)
-----------------------------------------------------

    adb shell cat /proc/meminfo
    adb shell procrank -p
    adb shell top -m 10 -s cpu
    adb shell dumpsys meminfo 242

dumpsys package 패키지명 | grep versionCode

-----------------------------------------------------
- ■ procrank and top
-----------------------------------------------------

    adb shell procrank -p
    adb shell top -m 10 -d 1 -s cpu

    Usage: procrank [ -W ] [ -v | -r | -p | -u | -h ]
        -v  Sort by VSS.
        -r  Sort by RSS.
        -p  Sort by PSS.
        -u  Sort by USS.
            (Default sort order is PSS.)
        -R  Reverse sort order (default is descending).
        -w  Display statistics for working set only.
        -W  Reset working set of all processes.
        -h  Display this help screen.

    Usage: top [ -m max_procs ] [ -n iterations ] [ -d delay ] [ -s sort_column ] [ -t ] [ -h ]
        -m     num    Maximum number of processes to display.
        -n      num    Updates to show before exiting.
        -d      num    Seconds to wait between updates.
        -s      col      Column to sort by (cpu,vss,rss,thr).
        -t                 Show threads instead of processes.
        -h                 Display this help screen.

-----------------------------------------------------
- ■ 시스템 메모리 사용 현황
-----------------------------------------------------

    우선 전체 시스템의 메모리부터 파악하자.
    $> adb shell 로 접속한 후 /proc/meminfo 를 열어본다.

    adb pull /proc/meminfo /tmp 명령으로 꺼내서 봐도 되고.
    adb shell cat /proc/meminfo 명령으로 봐도 된다.

-----------------------------------------------------
- ■ VSS 와 RSS
-----------------------------------------------------

    이론적으로(?) 프로세스가 차지하는 정확한 메모리의 크기를 알 수는 없다고 한다.
    다만, 프로세스에 매핑되는 page 수를 해석하는 다양한 방법이 있는데, VSS, RSS, USS, PSS 등이 그것이다.

    VSS(Virtual Set Size)
        프로세스와 관련된 버추얼 메모리(virtual memory) 크기.
        메모리 맵이 1M이면 프로세스가 어떤 리소스도 사용하지 않아도 VSS는 1MB가 된다.
        의미있는 수치라고 볼 수 없음.
    RSS(Resident Set Size)
        프로세스와 관련된 물리적 페이지(physical pages) 수.
        여러 프로세스 사이에서 공유된 페이지(shared pages) 수를 확인할 수 없어 별 의미없음.
        A프로세스의 RSS가 2MB, B프로세스의 RSS가 2MB일 때 실제 물리 페이지 수는 4MB이거나 2MB일 수 있다.

    어쨌거나 프로세스별 VSS 와 RSS 값은 top 명령어로 구할 수 있다.

-----------------------------------------------------
- ■ USS 와 PSS
-----------------------------------------------------

    VSS나 RSS보다 조금 더 의미있는 수치는 USS와 PSS인데,
    procrank 명령어로 구할 수 있다.

    USS(Unique Set Size)
        프로세스만의 고유한 페이지 수.
        공유되지 않는 프로세스에 private한 메모리 크기이다.
    PSS(Proportional Set Size)
        USS + (공유 페이지 / 공유하는 프로세스 수).
        즉, 프로세스 고유 메모리 사용량 + 하나의 프로세스가 차지하는 공유 메모리 비율이다.
        만약 A프로세스가 6MB 메모리를 사용하고 그 중 2MB가 그 프로세스의 고유 영역이라면, 나머지 4MB는 공유 메모리이다. 4MB의 공유메모리를 4개의 프로세스가 공유하고 있다면 PSS는 2MB + (4MB/4) = 3MB가 된다.

    PSS는 공유되는 페이지를 공유 프로세스의 수로 나누어서 좀 더 정확한 메모리 사용량을 파악할 수 있게 해준다.
    이게 프로세스가 사용하는 실제 메모리 크기에 가장 근접한 값이라고 볼 수 있다.

    프로세스별 PSS 수치는 "DDMS 의 Sysinfo 탭" 을 통해서도 볼 수 있다.
    파이그래프로 비주얼하게 보여주므로, 메모리 사용 비율을 쉽게 파악할 수 있다.

-----------------------------------------------------
- ■ 조금 더 상세한 메모리 정보
-----------------------------------------------------

    top과 procrank를 통해 애플리케이션의 개략적인 메모리 사용량을 알수 있었다면,
    dumpsys meminfo <PID(프로세스 ID)> 명령어로 약간 더 상세한 메모리 사용 정보를 구할 수 있다.
    dumpsys meminfo 명령어는 프로세스가 사용하는 native(C/C++)와 dalvik(JAVA) 영역을
    구분하여 보여주므로 달빅 VM 만의 메모리 크기를 알 수 있다.

    - Pss 필드 : procrank에 나온 PSS 값과 동일
    - shared dirty : 다른 프로세스와 공유하는 dirty pages(디스크로부터 페이징 불가능?)
    - private dirty : 프로세스 고유의 dirty pages

    Objects와 SQL 섹션에는 View/Context/Activity 등의 개수와 SQL 페이지 크기 등
    중요한 정보를 제공하므로 활용가치가 높다.

    dumpsys meminfo PID 명령

        dumpsys meminfo 출력 결과에 나온 dalvik 컬럼의
        size, allocated, free 필드값은 DDMS의 VM Heap 탭을 통해서도 확인할 수 있다.
        각각 VM Heap 탭의 Heap Size, Allocated, Free 컬럼에 해당한다.
        DDMS의 VM Heap 탭의 정보는 달빅 VM만의 메모리 정보일 뿐, 애플리케이션의 native 라이브러리가 사용하는 메모리 정보는 제외되었다.




= 참고 원문 =
http://ecogeo.tistory.com/255
http://kohlerm.blogspot.com/2009/04/analyzing-memory-usage-off-your-android.html



dumpsys

dumpsys는 안드로이드 폰의 어플리케이션 및 현재 기기의 상태에 대한 자세한 정보를 제공한다.
(소스코드 위치: ./frameworks/base/cmds/dumpsys/dumpsys.cpp)


dumpsys meminfo: 메모리 사용 정보를 표시

dumpsys cpuinfo: CPU 프로세서 사용 정보를 표시

dumpmsys account: 모든 계정에 대한 정보를 표시

dumpsys activity: Activity에 대한 정보를 표시

dumpsys window: 키보드와 윈도우, 그리고 그들의 z order에 대한 정보를 표시

dumpsys wifi: 접속 가능한 액세스 포인트와 현재의 연결 상태를 표시

dumpsys power: 전원 관리와 관련된 정보(wakelock, screen off time 등)를 표시


dumpstate

dumpstate는 device 상태정보를 추출하는 여러 명령어들의 조합으로 구성 (dumpsys를 포함)
(소스코드 위치: ./frameworks/base/cmds/dumpstate/dumpstate.c)


Usage: dumpstate [-d] [-o file] [-s] [-z]
-d: 파일 이름에 날짜 정보를 추가 (-o 옵션과 함께 사용)
-o: 파일에 기록 (screen에는 표시하지 않음)
-s: 결과를 콘솔 소켓에 기록
-z: gzip 압축하여 파일로 기록 (-o 옵션과 함께 사용)



참고자료
http://comments.gmane.org/gmane.comp.handhelds.android.devel/174717

http://stackoverflow.com/questions/5780280/how-can-i-see-which-wakelocks-are-active
http://wrightrocket.blogspot.com/2010/12/useful-commands-in-adb-shell.html
http://tkhwang.pe.kr/archives/65
http://ecogeo.tistory.com/256





http://neit.egloos.com/category/Android

싸이트 좋다.


출처 :http://neit.egloos.com/2289

1. Process의 전체 메모리 사용량
아래 명령어를 통해서 안드로이드 시스템의 프로세스별 메모리 사용량을 알 수 있습니다.

>>adb shell procrank
[출력 결과]
PID Vss Rss Pss Uss cmdline
17964 160344K 108632K 82786K 79476K com.android.sh
15072 76400K 76396K 51285K 48688K com.android.launcher2
14812 151476K 74892K 46400K 40924K system_server
15255 41068K 41068K 17780K 16276K com.android.settings
- VSS(Virtual Set Size) - 프로세스와 관련된 버추얼 메모리(virtual memory) 크기.
- RSS(Resident Set Size) - 프로세스와 관련된 물리적 페이지(physical pages) 수.
- USS(Unique Set Size) - 프로세스만의 고유한 페이지 수.
- PSS(Proportional Set Size) - USS + (공유 페이지 / 공유하는 프로세스 수).
e 프로세스가 사용하는 실제 메모리 크기에 가장 근접한 값이라고 볼 수 있다
Procrank 명령을 통해서 Email Process 전반적인 메모리 사용량을 알 수 있지만, 프로세스 내에서 보다 구체적인 사용량을 알기 다른 방법이 필요합니다.

2. Process 내부 메모리 사용량
아래 명령을 통해서 프로세스의 메모리 사용 비율을 알수 있습니다.
>> adb shell dumpsys meminfo <processname>
** MEMINFO in pid 17964 [com.android.sh] **
native extern dalvik other total
size: 95312 N/A 11655 N/A 106967
allocated: 94895 11385 7974 N/A 102869
free: 416 N/A 3681 N/A 4097
(Pss): 8125 N/A 4790 69820 82735
(shared dirty): 2936 N/A 1964 6744 11644
(priv dirty): 8052 N/A 1096 63264 72412
dumpsys meminfo 명령어는 프로세스가 사용하는 native(C/C++)와 dalvik(JAVA) 영역을 구분하여 보여주므로 달빅 VM 만의 메모리 크기를 알 수 있습니다.
- Pss 필드 : procrank에 나온 PSS 값과 동일
- shared dirty : 다른 프로세스와 공유하는 dirty pages(디스크로부터 페이징 불가능?)
- private dirty : 프로세스 고유의 dirty pages
출력결과에서와 같이 Memory Usage는 dalvik(JAVA) 영역보다 native(C/C++)영역의 비중이 훨씬 크기 때문에 Native 에서의 메모리 usage를 분석할 필요가 있습니다.
3. Native Heap 분석
에뮬레이터나, rooting 된 단말에서만 적용되는 방법입니다.
아래 명령어를 통해 안드로이드 단말의 메모리 추적기능을 Enable 시킵니다.
$ adb shell setprop libc.debug.malloc 1
$ adb shell stop
$ adb shell start
이후, DDMS를 통해서 Native Heap 영역을 관찰할 수 있는데, Default DDMS는 Native Heap 에 대한 탭 메뉴가 제공되지 않기 때문에 아래 조작을 통해서 Native Heap 탭영역을 활성화 시킵니다.
파일 열기 : ~/.android/ddms.cfg
다음 내용 추가 : native=true
위 절차가 마무리 되면 아래와 같이 DDMS에서 Native Heap 탭을 볼 수 있습니다.
탭의 내용을 살펴보면, 특정 프로세스에 대해서 Native C Library에 의한 메모리 할당 내역을 살펴볼 수 있습니다.
메모리 할당 케이스 별로, native Library가 사용하는 용량확인 할 수 있습니다.




메모리 맵 확인

cat /proc/pid/maps


/sys/kernel/debug/tracing/available_filter_functions



/sys/kernel/debug/tracing$ echo sys_brk > sey_ftrace_filter

/sys/kernel/debug/tracing$ cat trace

/sys/kernel/debug/tracing$ cat current_tracer

/sys/kernel/debug/tracing$ echo function > current_tracer

/sys/kernel/debug/tracing$ cat trace

/sys/kernel/debug/tracing$ echo kmalloc >> set_ftrace_filter

/sys/kernel/debug/tracing$ cat trace

/sys/kernel/debug/tracing$ echo __kmalloc >> set_frace_filter


/data/local/tmp 

cat /proc/pid/oom_adj



$ librank


$ showmap


$ procmem


$ cat /proc/self/smaps


$ cat /data/tombstones/tombstons_00\


dumpsys gfxinfo

dumpsys meminfo


adb shell dumpsys activity services
adb shell service list


반응형
Posted by Real_G