Android - adb 명령어로 메모리 덤프 (dump-heap)

By JS | Last updated: June 23, 2021

adb 명령어로 실행 중인 프로세스의 메모리를 덤프할 수 있습니다.

아래 명령어를 사용하여 PID의 메모리를 덤프합니다.

$ adb shell am dumpheap [--user <USER_ID> current] [-n] [-g] <PROCESS> <FILE>
      Dump the heap of a process.  The given <PROCESS> argument may
        be either a process name or pid.  Options are:
      -n: dump native heap instead of managed heap
      -g: force GC before dumping the heap
      --user <USER_ID>

메모리 덤프 추출

메모리 덤프 추출할 App의 PID 확인

$ adb shell ps -ef | grep com.android.chrome
u0_a124        4779    266 5 22:29:20 ?     00:00:01 com.android.chrome

adb 명령어로 dump 추출

$ adb shell am dumpheap 4779
File: /data/local/tmp/heapdump-20210623-223001.prof
Waiting for dump to finish...

로컬 PC로 파일 복사

$ adb pull /data/local/tmp/heapdump-20210623-223001.prof

이제 추출된 prof 파일을 Android Studio 등을 이용하여 분석하시면 됩니다.

prof 파일을 Eclipse MAT에서 열기

prof 파일을 Eclipse MAT에서 열려면, MAT가 인식되는 형식으로 변환되어야 합니다.

SDK의 hprof-conv라는 툴이 있는데, 다음 명령어로 prof 파일을 MAT가 읽을 수 있는 파일로 변환할 수 있습니다.

$ hprof-conv heapdump-20210623-223001.prof heapdump-20210623-223001.prof.conv

변환된 파일을 MAT에서 열면 됩니다.

hprof-conv 툴 위치

hprof-conv는 adb가 있는 폴더에 함께 있습니다. Android Studio에서 제공하는 SDK 툴에 포함되어있습니다.

../Sdk/platform-tools/$ ls -al

drwxrwxr-x  5 mjs mjs    4096 1218  2020 .
drwxrwxr-x 15 mjs mjs    4096  416 20:22 ..
-rwxrwxr-x  1 mjs mjs 7262264 1218  2020 adb
-rwxrwxr-x  1 mjs mjs   13696 1218  2020 hprof-conv
...

Related Posts

댓글을 보거나 쓰려면 이 버튼을 눌러주세요.
codechachaCopyright ©2019 codechacha