Android - adbコマンドでメモリダンプ(dump-heap)

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 js js    4096 1218  2020 .
drwxrwxr-x 15 js js    4096  416 20:22 ..
-rwxrwxr-x  1 js js 7262264 1218  2020 adb
-rwxrwxr-x  1 js js   13696 1218  2020 hprof-conv
...
codechachaCopyright ©2019 codechacha