본문 바로가기
개발/안드로이드, 자바

Android app의 memory 사용량 확인

by RedBaDa 2016. 4. 5.
반응형

Java에서는 명시적으로 Heap을 할당하고 해제하는 과정이 없지만, 그렇다고 해서 Memory를 아무런 제한 없이 사용할 수 있는 것은 아니다. 특히 제한된 RAM에서 동작하는 Android app을 작성할 때는 이 부분을 신경 써야 한다. 할당된 Heap 이상으로 Memory 할당을 하게 되면, Garbage collection이 일어나는데, App이 잠시 멈추는 현상이 발생한다.

adb tool을 사용해서 다음과 같이, 전체 Package의 Memory 사용량을 확인할 수 있다.

adb shell dumpsys meminfo

Applications Memory Usage (kB):
Uptime: 16492740 Realtime: 29717020

Total PSS by process:
   108110 kB: system (pid 692)
    63016 kB: com.sec.android.app.launcher (pid 1335)
    48715 kB: com.android.mms (pid 25908)
    ....

Total PSS by OOM adjustment:
   108110 kB: System
              108110 kB: system (pid 692)
   147105 kB: Persistent
               38188 kB: com.android.systemui (pid 1112)
               23315 kB: android.process.acore (pid 1542)
               15469 kB: com.android.phone (pid 1307)
               ...

여기에 package name을 추가하면 해당 Package의 전반적인 Memory 사용량을 더 자세히 살펴 볼 수 있다.

adb shell dumpsys meminfo com.example.helloworld

Applications Memory Usage (kB):
Uptime: 16485284 Realtime: 29709564

** MEMINFO in pid 5205 [com.example.helloworld] **
                         Shared  Private     Heap     Heap     Heap
                   Pss    Dirty    Dirty     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------
       Native        0        0        0     6264     5789      198
       Dalvik     3164    19656     2772    25668    15534    10134
        Stack       80        0       80                           
       Cursor        0        0        0                           
       Ashmem        0        0        0                           
    Other dev      480      380      312                           
     .so mmap     1487     2996     1008                           
    .jar mmap        0        0        0                           
    .apk mmap       52        0        0                           
    .ttf mmap        1        0        0                           
    .dex mmap      443      536       16                           
   Other mmap        4        8        4                           
      Unknown     1930      892     1920                           
        TOTAL     7641    24468     6112    31932    21323    10332

Priavte RAM은 오직 해당 Process 1개에만 할당된 RAM으로 해당 Process가 종료할 때만 회수가 된다. 
        
PSS는 Proportional Set Size의 약자로 다른 Process와 공유하는 RAM을 고려한 크기를 말한다. 만약에 어떤 RAM page가 해당 Process에만 할당되어 있다면 그 Page 크기 그대로 PSS에 더해진다. 하지만 어떤 RAM page를 2개의 Process가 공유한다면 그 Page는 절반만 PSS에 더해진다. 따라서 각 Process의 PSS를 모두 더하면 실제 사용 중인 Physical RAM 크기가 되는 것이다.

반응형