メモリの使用状況を確認する (dumpsys meminfo)

各プロセスのメモリ使用状況を確認する

dumpsys コマンドの meminfo セクションでは、各プロセスのメモリ使用状況を確認することができます。

$ adb shell dumpsys meminfo
Applications Memory Usage (kB):
Uptime: 169910958 Realtime: 170196415

Total PSS by process:
    96302 kB: system (pid 728)
    44547 kB: com.android.systemui (pid 965)
    32601 kB: com.sonyericsson.android.pobox.imecore (pid 1042)
    29610 kB: com.android.settings (pid 8006)
    26500 kB: com.sonyericsson.home (pid 1321)
    23027 kB: com.facebook.katana (pid 7371)
    17963 kB: com.facebook.katana:dash (pid 7641)
    13579 kB: com.google.android.gms (pid 5171)
    ...

プロセスを指定してメモリ使用状況を確認する

上記で表示されたパッケージ名や pid を、dumpsys meminfo コマンドの後ろに続けて指定することで、そのプロセスにおける詳細なメモリ使用情報を調べられます。

$ adb shell dumpsys meminfo com.android.phone
Applications Memory Usage (kB):
Uptime: 170096486 Realtime: 170381943

** MEMINFO in pid 1066 [com.android.phone] **
                         Shared  Private     Heap     Heap     Heap
                   Pss    Dirty    Dirty     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------
       Native       20        8       20     2376     2323       48
       Dalvik     3236     5256     3156    11108     3032     8076
       Cursor        0        0        0
       Ashmem        2        4        0
    Other dev        4       48        0
     .so mmap      564     2232      464
    .jar mmap        6        0        0
    .apk mmap      955        0        0
    .ttf mmap        0        0        0
    .dex mmap        0        0        0
   Other mmap     2113       16      184
      Unknown     1058      484     1056
        TOTAL     7958     8048     4880    13484     5355     8124

 Objects
               Views:        0         ViewRootImpl:        0
         AppContexts:       13           Activities:        0
              Assets:        7        AssetManagers:        7
       Local Binders:       45        Proxy Binders:       25
    Death Recipients:        5
     OpenSSL Sockets:        0

 SQL
         MEMORY_USED:      178
  PAGECACHE_OVERFLOW:       32          MALLOC_SIZE:       62

 DATABASES
      pgsz     dbsz   Lookaside(b)          cache  Dbname
         4       16             22       131/19/2  /data/data/com.android.providers.telephony/databases/telephony.db
         4       20             25         1/19/2  /data/data/com.android.phone/databases/rejectmsgs.db

プログラムからメモリ使用状況を確認する

Android プログラムの実装からメモリ情報を取得するには、android.os.Debug クラスを使用します。

// Native ヒープの使用可能最大サイズ
long total = Debug.getNativeHeapSize();

// Native ヒープの残りサイズ
long free = Debug.getNativeHeapFreeSize()

// Native ヒープの割り当て済みサイズ
long alloc = Debug.getNativeHeapAllocatedSize();

デバイス上で procrank が使用できる場合

Android デバイスを debug ビルドパッケージで開発しているときは、Linux の procrank コマンドを使用できるかもしれません。 adb shell で Android デバイスに接続して次のように実行します。

# procrank
  PID      Vss      Rss      Pss      Uss  cmdline
  890   84456K   48668K   25850K   21284K  system_server
 1231   50748K   39088K   17587K   13792K  com.android.launcher2
  947   34488K   28528K   10834K    9308K  com.android.wallpaper
  987   26964K   26956K    8751K    7308K  com.google.process.gapps
  954   24300K   24296K    6249K    4824K  com.android.phone
  948   23020K   23016K    5864K    4748K  com.android.inputmethod.latin
  888   25728K   25724K    5774K    3668K  zygote
  977   24100K   24096K    5667K    4340K  android.process.acore
  ...