Android system detects program memory footprint in various ways

  • 2020-06-12 10:41:08
  • OfStack

Check the total memory of the system


liuhx@uc ~ $ adb shell cat /proc/meminfo
MemTotal:         840868 kB
MemFree:          457344 kB
Buffers:            1744 kB
Cached:           203064 kB
SwapCached:            0 kB
Active:           234932 kB
Inactive:         129644 kB
Active(anon):     170292 kB
Inactive(anon):        0 kB
Active(file):      64640 kB
Inactive(file):   129644 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        159820 kB
Mapped:            97916 kB
Slab:               7808 kB
SReclaimable:       2920 kB
SUnreclaim:         4888 kB
PageTables:         3516 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      420432 kB
Committed_AS:    1295272 kB
VmallocTotal:     122880 kB
VmallocUsed:       16508 kB
VmallocChunk:      76804 kB

Line 1 MemTotal is the total memory. 1 average does not equal the number advertised by the phone. If it's 2G, it'll be around 1.8ES7en

2. Check each type of memory usage for a program

dumpsys meminfo package name is available. If you don't know the package name, you can use the ps command to get all the running programs, including pid. Take the built-in browser as an example:


liuhx@uc ~ $ adb shell dumpsys meminfo com.android.browser
Applications Memory Usage (kB):
Uptime: 23140065 Realtime: 23140065 ** MEMINFO in pid 939 [com.android.browser] **
                         Shared  Private     Heap     Heap     Heap
                   Pss    Dirty    Dirty     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------
       Native     7111      748     7048     8964     8634      329
       Dalvik     7338     5096     6892     7568     7041      527
       Cursor        0        0        0                          
       Ashmem      276        0      276                          
    Other dev        4        0        0                          
     .so mmap     5050     1728      252                          
    .jar mmap        0        0        0                          
    .apk mmap      418        0        0                          
    .ttf mmap      439        0        0                          
    .dex mmap        0        0        0                          
   Other mmap     2320       16       24                          
      Unknown     5173       12     5172                          
        TOTAL    28129     7600    19664    16532    15675      856
 
 Objects
               Views:      104         ViewRootImpl:        1
         AppContexts:        4           Activities:        1
              Assets:        2        AssetManagers:        2
       Local Binders:       15        Proxy Binders:       19
    Death Recipients:        0
     OpenSSL Sockets:        0
 
 SQL
         MEMORY_USED:     1468
  PAGECACHE_OVERFLOW:      899          MALLOC_SIZE:      168
 
 DATABASES
      pgsz     dbsz   Lookaside(b)          cache  Dbname
         4     1180             68        54/55/9  /data/data/com.android.browser/databases/browser2.db
         4     1180             25         1/60/2  /data/data/com.android.browser/databases/browser2.db (2)
         4     1180             65        90/23/7  /data/data/com.android.browser/databases/browser2.db (1)
         4       40             18         0/15/1  /data/data/com.android.browser/databases/webview.db
 
 Asset Allocations
    zip:/system/app/Browser.apk:/resources.arsc: 881K

The output of dumpsys may vary between versions of the android system.

Where Pss Total is the PSS occupied by the program.

3. Check program status


liuhx@uc ~ $ adb shell cat /proc/939/status
Name: android.browser
State: S (sleeping)
Tgid: 939
Pid: 939
PPid: 38
TracerPid: 0
Uid: 10013 10013 10013 10013
Gid: 10013 10013 10013 10013
FDSize: 256
Groups: 1015 1028 3003 50013
VmPeak:   215504 kB
VmSize:   206780 kB
VmLck:        0 kB
VmHWM:    52108 kB
VmRSS:    47748 kB
VmData:    53616 kB
VmStk:       84 kB
VmExe:        8 kB
VmLib:    29300 kB
VmPTE:      156 kB
Threads: 29
SigQ: 0/6656
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000001204
SigIgn: 0000000000000000
SigCgt: 00000002000094e8
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: fffffffffffffeff
voluntary_ctxt_switches: 451
nonvoluntary_ctxt_switches: 3563

VmRss is RSS for program use

4. Check the memory usage of each part of the program.


cat /proc/939/smaps

The output of this command is long, and here is part 1:

4b399000-4b39b000 r--p 0001d000 1f:00 560        /system/lib/libGLESv1_enc.so
Size:                  8 kB
Rss:                   8 kB
Pss:                   8 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:         8 kB
Referenced:            8 kB
Swap:                  0 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB
4b39b000-4b39c000 rw-p 0001f000 1f:00 560        /system/lib/libGLESv1_enc.so
Size:                  4 kB
Rss:                   4 kB
Pss:                   4 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:         4 kB
Referenced:            4 kB
Swap:                  0 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB


Related articles: