Android 内存分析

VSS

Vss是占用的虚拟内存,如果没有映射实际的内存也算进来。

RSS

Rss是占用的物理内存。是共享内存+私有内存。因为共享内存是多个进程共用的,所以存在重复计算。

PSS

Pss是占用的私有内存加上平分的共享内存。例如一块1M的共享内存被两个进程共享,那每个进程分500K。各进程的Pss相加基本等于实际被使用的物理内存,所以这个经常是最重要的参数。

USS

Uss Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)USS 是一个非常非常有用的数字, 因为它揭示了运行一个特定进程的真实的内存增量大小。如果进程被终止, USS 就是实际被返还给系统的内存大小。
USS 是针对某个进程开始有可疑内存泄露的情况,进行检测的最佳数字。怀疑某个程序有内存泄露可以查看这个值是否一直有增加

procrank

 PID       Vss      Rss      Pss      Uss  cmdline
  818  1049892K  106988K   83446K   78648K  com.turingcat.controller
  513    93080K   39716K   34369K   29308K  mqttserver
 1143    77224K   38052K   32703K   27644K  homebridge
  466   942228K   45536K   23049K   19128K  system_server
  120   851284K   41196K   14829K    9060K  zygote
  737   927780K   33940K   12800K   10040K  com.android.settings
  599   899380K   33484K   12036K    9108K  com.android.systemui
  709   892220K   26440K    8658K    6852K  com.google.android.inputmethod.pinyin
  776   865424K   24504K    6919K    5324K  android.process.media
  758   864292K   23572K    6689K    5372K  android.process.acore
 1115   874688K   25848K    5768K    3680K  com.thirdparty.superuser:superuser
  962   869468K   22004K    5316K    4080K  com.android.bluetooth
  724   882820K   22316K    4813K    3404K  com.android.nfc
  122    29272K    7144K    4521K    3492K  /system/bin/mediaserver
 1069   873828K   22896K    4379K    2736K  com.thirdparty.superuser
 1024   863044K   20164K    4149K    2968K  com.android.gallery3d
 2545   862440K   20488K    4032K    2744K  com.android.inputmethod.latin
 1004   861292K   18424K    3058K    1904K  com.android.camera2
  789   860188K   18228K    2754K    1620K  com.android.provision
  875   860180K   18272K    2739K    1644K  com.android.externalstorage
  119    19584K    3668K    1767K    1424K  /system/bin/surfaceflinger
  121     9544K    3356K    1342K     796K  /system/bin/drmserver
  640     3368K    1932K    1055K     888K  /system/bin/wpa_supplicant
 3589     1792K    1268K    1046K    1040K  ./procrank
  116     9784K    1280K     605K     512K  /system/bin/netd
  114     4736K    1256K     588K     508K  /system/bin/vold
  124     3344K    1200K     454K     360K  /system/bin/keystore
  125     6632K     948K     441K     400K  /system/bin/ccd
    1      540K     368K     282K     220K  /init
  118     1368K     660K     241K     216K  /system/bin/rild
  918     1020K     540K     233K     220K  /system/bin/dhcpcd
 1422     7660K     236K     224K     224K  /sbin/adbd
  228     3504K     468K     192K     176K  /system/bin/sdcard
  854     3516K     464K     184K     168K  /system/bin/sdcard
  123      992K     484K     177K     164K  /system/bin/installd
 3571      928K     472K     156K     120K  sh
  117     1028K     408K     155K     144K  /system/bin/debuggerd
 3558      924K     468K     152K     116K  /system/bin/sh
   94      516K     216K     152K      92K  /sbin/ueventd
  240      924K     456K     148K     116K  /system/bin/sh
  112     1424K     144K     140K     140K  /sbin/healthd
  127      920K     444K     135K     104K  /system/bin/sh
 3565     2712K     192K     125K     104K  su
 1142      912K     432K     123K      92K  /system/bin/sh
  113      996K     324K     114K     108K  /system/bin/servicemanager
 3570      660K     128K      56K      32K  /system/xbin/su
 3568      660K     128K      53K      28K  /system/xbin/su
  115      656K     116K      45K      24K  /system/xbin/su
 3564      656K      96K      43K      28K  su
                           ------   ------  ------
                          287479K  237320K  TOTAL

RAM: 828508K total, 60664K free, 136668K buffers, 313116K cached, 900K shmem, 45636K slab

dumpsys meminfo XXX

Android程序内存被分为2部分:native和dalvik,dalvik就是我们平常说的java堆,我们创建的对象是在这里面分配的,而bitmap是直接在native上分配的,对于内存的限制是 native+dalvik 不能超过最大限制。Android程序内存一般限制在16M。

Android应用程序的默认最大内存值

Android应用程序的默认最大内存值为16M,有些应用程序可能会出现内存溢出,譬如ERROR/AndroidRuntime(264):java.lang.OutOfMemoryError: bitmap size exceeds VM budget

修改配置文件

getprop  |grep heap
[dalvik.vm.heapgrowthlimit]: [192m]
[dalvik.vm.heapmaxfree]: [8m]
[dalvik.vm.heapminfree]: [512k]
[dalvik.vm.heapsize]: [512m]
[dalvik.vm.heapstartsize]: [16m]
[dalvik.vm.heaptargetutilization]: [0.75]
Applications Memory Usage (kB):
Uptime: 182335652 Realtime: 182335652

** MEMINFO in pid 818 [com.turingcat.controller] **
                   Pss  Private  Private  Swapped     Heap     Heap     Heap
                 Total    Dirty    Clean    Dirty     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------   ------
  Native Heap    21827    21780        0        0    29232    27943     1156
  Dalvik Heap    24004    23892        0        0    51092    23684    27408
 Dalvik Other     9559     9404        0        0
        Stack      824      824        0        0
       Ashmem      132        0        0        0
    Other dev       21        0       20        0
     .so mmap     6254     2012     3184        0
    .apk mmap     1437        0      664        0
    .ttf mmap      506        0      180        0
    .dex mmap    18188     1056    15192        0
   Other mmap       94        4        8        0
      Unknown      348      348        0        0
        TOTAL    83194    59320    19248        0    80324    51627    28564

 Objects
               Views:      314         ViewRootImpl:        3
         AppContexts:       13           Activities:        3
              Assets:        2        AssetManagers:        2
       Local Binders:       42        Proxy Binders:       42
    Death Recipients:        1
     OpenSSL Sockets:        0

 SQL
         MEMORY_USED:     2956
  PAGECACHE_OVERFLOW:     2288          MALLOC_SIZE:       62

 DATABASES
      pgsz     dbsz   Lookaside(b)          cache  Dbname
         1     1088             21         0/37/3  /data/user/0/com.turingcat.controller/databases/ird.db
         4      196             21        0/147/3  /data/user/0/com.turingcat.controller/databases/vicenter.db
         4      296            457  155615/342/25  /data/user/0/com.turingcat.controller/databases/TuringCatProvider.db
         4       52            128      296/69/21  /data/user/0/com.turingcat.controller/databases/bugly_db_
         4       56             21         0/59/3  /data/user/0/com.turingcat.controller/databases/MideaSLK.db
         4     1560             87    32015/58/10  /data/user/0/com.turingcat.controller/databases/device_desc.db

showmap -a pid

更加细化

你可能感兴趣的:(Android 内存分析)