Android内存分析工具

摘要:
在Android系统开发过程中,经常需要分析进程的内存使用情况,并简要介绍Android内存分析的相关工具。MemFree:可用内存总量表示系统中未使用的内存,MemTotal MemFree表示已使用的内存。MemAvailable:应用程序的可用内存数。有一些内存已被使用,但可以在系统中回收,例如缓冲区、缓存和slab。因此,MemFree不能表示所有可用内存,可回收的内存是系统可用内存的总和。例如,MemAvailable≈MemFree+Buffers+Cached,这是内核计算的估计值。

在Android系统开发过程中,经常会要去分析进程的内存的使用情况,简单介绍下Android内存分析的相关工具。

文章参考:

1.dumpsys

2.memory-analysis-command

1.内存的指标
Item全称描述类型
USSUnique Set Size进程独占的内存(不包含共享库占用的内存)物理内存
PSSProportional Set Size进程独占 + 比例分配共享库占用的内存物理内存
RSSResident Set Size进程独占 + 共享库占用的内存物理内存
VSSVirtual Set SizeRSS + 未分配的物理内存虚拟内存
2.内存分析工具

2.1 proc/meminfo

查看详细的内存信息

# cat /proc/meminfo

MemTotal:        3938668 kB
MemFree:         2766932 kB
MemAvailable:    3366724 kB
Buffers:           54764 kB
Cached:           683932 kB
SwapCached:            0 kB
Active:           468604 kB
Inactive:         493776 kB
Active(anon):     226044 kB
Inactive(anon):   114680 kB
Active(file):     242560 kB
Inactive(file):   379096 kB
Unevictable:         256 kB
Mlocked:             256 kB
SwapTotal:       1969000 kB
SwapFree:        1969000 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        223980 kB
Mapped:           376328 kB
Shmem:            117060 kB
Slab:             119740 kB
SReclaimable:      80184 kB
SUnreclaim:        39556 kB
KernelStack:       11872 kB
PageTables:        15752 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     3938332 kB
Committed_AS:   40624220 kB
VmallocTotal:   258867136 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
CmaTotal:          16384 kB
CmaFree:           13892 kB
  • MemTotal:表示系统内存总数

    系统从上电启动到引导完成,内核中需要保留部分内存,剩下的内存总数即为 MemTotal,这个值在系统运行期间保持不变。

  • MemFree:空闲内存总数

    表示系统中尚未使用的内存, MemTotal - MemFree 表示已经用掉的内存。

  • MemAvailable:可用内存

    应用程序可用内存数,系统中存在一些已经被使用但是可以回收的内存,比如Buffers、Cached和slab的部分,所以 MemFree 不能代表全部可用的内存,加上可以回收的内存才是系统可用内存的总和。

    比如 MemAvailable ≈ MemFree + Buffers + Cached,这里是内核计算出来的估值。MemFree表示系统层面,MemAvailable泛指应用层面。

  • Buffers:缓冲区内存

  • Cached:缓存区内存

2.2 free

# free
				total        used        free      shared     buffers
Mem:       4033196032  1199968256  2833227776   119869440    56078336
-/+ buffers/cache:     1143889920  2889306112
Swap:      2016256000           0  2016256000

# free -m
				total        used        free      shared     buffers
Mem:             3846        1144        2701         114          53
-/+ buffers/cache:           1091        2755
Swap:            1922           0        1922

轻量级的内存查看工具,内容来源于proc/meminfo.

Mem.total = Mem.used + Mem.free,即 3846 = 1144 + 2701;

Mem.used - Mem.buffers = buffers.used,即 1144 - 53 = 1091;

Mem.free + Mem.buffers = buffers.free, 即 2701 + 53 = 2755;

2.3 dumpsys meminfo

输出的结果大致按照4个部分排序,分别Total PSS by process、Total PSS by OOM adjustment、Total PSS by category 和 Total RAM.

Total PSS by process:以进程的PSS从大到小排序

Total PSS by OOM adjustment:分别显示每个类型进程的情况,Native/System/Persistent/Foreground/Visible/Perceptible/A Services/Home/B Services/Cached.

Total PSS by category:以Dalvik/Native/.art mmap/.dex map等划分的各类进程的总PSS情况

Total:显示总内存、可用内存、已使用内存、其他内存.

# dumpsys meminfo

Applications Memory Usage (in Kilobytes):
Uptime: 18012360 Realtime: 92063532

Total PSS by process:
     93,509K: system (pid 469)
     79,586K: com.android.systemui (pid 628)
     63,474K: zygote (pid 378)
     32,858K: com.android.launcher3 (pid 1054 / activities)
     28,094K: zygote64 (pid 377)
     25,557K: webview_zygote32 (pid 687)
     25,377K: com.android.phone (pid 749)
     18,679K: android.hardware.neuralnetworks@1.0-service-armnn (pid 263)
     15,488K: com.android.inputmethod.latin (pid 606)
     13,830K: surfaceflinger (pid 269)
     13,543K: android.process.media (pid 1170)
     12,843K: com.android.email (pid 1302)
     10,147K: android.hardware.camera.provider@2.4-service (pid 255)
      9,675K: android.rockchip.update.service (pid 1140)
      8,219K: com.android.calendar (pid 1850)
      8,027K: com.android.providers.calendar (pid 1284)
      7,646K: mediaserver (pid 387)
      6,977K: com.android.quicksearchbox (pid 1190)
      6,827K: com.android.mtp (pid 1876)
      6,820K: media.codec (pid 391)
      6,675K: com.android.printspooler (pid 1021)
      6,587K: audioserver (pid 379)
      6,504K: com.cghs.stresstest (pid 1011)
      6,449K: media.extractor (pid 385)
      6,246K: android.ext.services (pid 1407)
      5,812K: com.android.keychain (pid 1114)
      5,633K: com.android.smspush (pid 1069)
      4,095K: android.hardware.audio@2.0-service (pid 253)
      3,916K: cameraserver (pid 380)
      3,191K: media.metrics (pid 386)
      2,998K: android.hardware.graphics.composer@2.1-service (pid 261)
      2,910K: logd (pid 232)
      2,803K: drmserver (pid 381)
      2,789K: android.hardware.wifi@1.0-service (pid 266)
      2,442K: android.hardware.drm@1.0-service (pid 258)
      2,405K: vold (pid 245)
      2,214K: netd (pid 388)
      1,970K: android.hardware.drm@1.0-service.widevine (pid 259)
      1,799K: keystore (pid 383)
      1,798K: installd (pid 382)
      1,707K: /init (pid 1)
      1,642K: hwservicemanager (pid 234)
      1,509K: adbd (pid 1841)
      1,497K: wificond (pid 390)
      1,430K: android.hardware.sensors@1.0-service (pid 265)
      1,410K: android.hardware.keymaster@3.0-service (pid 244)
      1,276K: mediadrmserver (pid 384)
      1,243K: android.hardware.graphics.allocator@2.0-service (pid 260)
      1,241K: ip6tables-restore (pid 403)
      1,234K: gatekeeperd (pid 393)
      1,163K: iptables-restore (pid 402)
      1,158K: ueventd (pid 207)
      1,133K: thermalserviced (pid 270)
      1,082K: storaged (pid 389)
      1,034K: android.hardware.bluetooth@1.0-service (pid 254)
      1,009K: android.hardware.configstore@1.0-service (pid 257)
      1,005K: android.hardware.cas@1.0-service (pid 256)
        985K: healthd (pid 267)
        888K: android.hardware.light@2.0-service (pid 262)
        861K: android.hardware.power@1.0-service (pid 264)
        839K: servicemanager (pid 233)
        801K: vndservicemanager (pid 235)
        770K: dumpsys (pid 2032)
        759K: android.hidl.allocator@1.0-service (pid 252)
        733K: sh (pid 1983)
        724K: sh (pid 274)
        676K: lmkd (pid 268)
        658K: tombstoned (pid 395)

Total PSS by OOM adjustment:
    253,080K: Native
         63,474K: zygote (pid 378)
         28,094K: zygote64 (pid 377)
         25,557K: webview_zygote32 (pid 687)
         18,679K: android.hardware.neuralnetworks@1.0-service-armnn (pid 263)
         13,830K: surfaceflinger (pid 269)
         10,147K: android.hardware.camera.provider@2.4-service (pid 255)
          7,646K: mediaserver (pid 387)
          6,820K: media.codec (pid 391)
          6,587K: audioserver (pid 379)
          6,449K: media.extractor (pid 385)
          4,095K: android.hardware.audio@2.0-service (pid 253)
          3,916K: cameraserver (pid 380)
          3,191K: media.metrics (pid 386)
          2,998K: android.hardware.graphics.composer@2.1-service (pid 261)
          2,910K: logd (pid 232)
          2,803K: drmserver (pid 381)
          2,789K: android.hardware.wifi@1.0-service (pid 266)
          2,442K: android.hardware.drm@1.0-service (pid 258)
          2,405K: vold (pid 245)
          2,214K: netd (pid 388)
          1,970K: android.hardware.drm@1.0-service.widevine (pid 259)
          1,799K: keystore (pid 383)
          1,798K: installd (pid 382)
          1,707K: /init (pid 1)
          1,642K: hwservicemanager (pid 234)
          1,509K: adbd (pid 1841)
          1,497K: wificond (pid 390)
          1,430K: android.hardware.sensors@1.0-service (pid 265)
          1,410K: android.hardware.keymaster@3.0-service (pid 244)
          1,276K: mediadrmserver (pid 384)
          1,243K: android.hardware.graphics.allocator@2.0-service (pid 260)
          1,241K: ip6tables-restore (pid 403)
          1,234K: gatekeeperd (pid 393)
          1,163K: iptables-restore (pid 402)
          1,158K: ueventd (pid 207)
          1,133K: thermalserviced (pid 270)
          1,082K: storaged (pid 389)
          1,034K: android.hardware.bluetooth@1.0-service (pid 254)
          1,009K: android.hardware.configstore@1.0-service (pid 257)
          1,005K: android.hardware.cas@1.0-service (pid 256)
            985K: healthd (pid 267)
            888K: android.hardware.light@2.0-service (pid 262)
            861K: android.hardware.power@1.0-service (pid 264)
            839K: servicemanager (pid 233)
            801K: vndservicemanager (pid 235)
            770K: dumpsys (pid 2032)
            759K: android.hidl.allocator@1.0-service (pid 252)
            733K: sh (pid 1983)
            724K: sh (pid 274)
            676K: lmkd (pid 268)
            658K: tombstoned (pid 395)
     93,509K: System
         93,509K: system (pid 469)
    111,467K: Persistent
         79,586K: com.android.systemui (pid 628)
         25,377K: com.android.phone (pid 749)
          6,504K: com.cghs.stresstest (pid 1011)
     32,858K: Foreground
         32,858K: com.android.launcher3 (pid 1054 / activities)
      5,633K: Visible
          5,633K: com.android.smspush (pid 1069)
     15,488K: Perceptible
         15,488K: com.android.inputmethod.latin (pid 606)
      9,675K: B Services
          9,675K: android.rockchip.update.service (pid 1140)
     75,169K: Cached
         13,543K: android.process.media (pid 1170)
         12,843K: com.android.email (pid 1302)
          8,219K: com.android.calendar (pid 1850)
          8,027K: com.android.providers.calendar (pid 1284)
          6,977K: com.android.quicksearchbox (pid 1190)
          6,827K: com.android.mtp (pid 1876)
          6,675K: com.android.printspooler (pid 1021)
          6,246K: android.ext.services (pid 1407)
          5,812K: com.android.keychain (pid 1114)

Total PSS by category:
    157,906K: .so mmap
    109,632K: Native
    106,914K: .dex mmap
     56,243K: .oat mmap
     44,939K: .apk mmap
     32,029K: .art mmap
     24,460K: Unknown
     23,246K: Dalvik
     18,957K: Other mmap
     11,423K: .ttf mmap
      7,471K: Dalvik Other
      2,288K: Stack
        879K: Other dev
        320K: Ashmem
        172K: .jar mmap
          0K: Cursor
          0K: Gfx dev
          0K: EGL mtrack
          0K: GL mtrack
          0K: Other mtrack

Total RAM: 3,938,668K (status normal)
 Free RAM: 3,283,817K (   75,169K cached pss +   442,724K cached kernel + 2,765,924K free)
 Used RAM:   750,258K (  521,710K used pss +   228,548K kernel)
 Lost RAM:   -95,419K
     ZRAM:        12K physical used for         0K in swap (1,969,000K total swap)
   Tuning: 192 (large 512), oom   322,560K, restore limit   107,520K (high-end-gfx)

2.4 procrank

获取所有进程的内存使用的排行榜,排行是以Pss的大小而排序.

# procrank

  PID       Vss      Rss      Pss      Uss  cmdline
  469  4715244K  199568K   93953K   76772K  system_server
  628  4774604K  184272K   79868K   63260K  com.android.systemui
  378  1581340K  116848K   63536K   35956K  zygote
 1054  5048780K  130504K   33086K   20376K  com.android.launcher3
  377  4239348K  130300K   28338K    8012K  zygote64
  687  1333924K   54604K   25609K    5504K  /system/bin/webview_zygote32
  749  4338336K  108900K   25539K   16612K  com.android.phone
  263    75200K   27620K   18690K   16088K  /vendor/bin/hw/android.hardware.neuralnetworks@1.0-service-armnn
  606  4330764K   91380K   15649K    9656K  com.android.inputmethod.latin
  269   312884K   27868K   13869K   10336K  /system/bin/surfaceflinger
 1170  4321764K   92900K   13701K    6336K  android.process.media
 1302  4323936K   84736K   13004K    8064K  com.android.email
  255    53284K   21308K   10199K    6972K  /vendor/bin/hw/android.hardware.camera.provider@2.4-service
 1140  4317440K   82832K    9876K    3808K  android.rockchip.update.service
 1850  4318536K   75692K    8379K    4096K  com.android.calendar
 1284  4315752K   77148K    8185K    3796K  com.android.providers.calendar
  387    73924K   18420K    7686K    5064K  /system/bin/mediaserver
 1190  4315400K   71948K    7137K    2800K  com.android.quicksearchbox
 1876  4315996K   74824K    6986K    2668K  com.android.mtp
  391    31860K   12104K    6845K    5644K  media.codec
 1021  4315960K   70452K    6835K    3020K  com.android.printspooler
 1011  4314012K   69076K    6658K    2864K  com.cghs.stresstest
  379    43520K   12616K    6621K    4920K  /system/bin/audioserver
  385  2164032K   18588K    6493K    4324K  media.extractor
 1407  4315816K   70584K    6403K    2296K  android.ext.services
 1114  4314788K   69144K    5972K    2240K  com.android.keychain
 1069  4313648K   67308K    5792K    2156K  com.android.smspush
  253    16256K    7892K    4116K    2808K  /vendor/bin/hw/android.hardware.audio@2.0-service
  380    24908K   11124K    3948K    2544K  /system/bin/cameraserver
  386  2128240K   11312K    3220K    2156K  media.metrics
  261    33120K    7556K    3022K    2432K  /vendor/bin/hw/android.hardware.graphics.composer@2.1-service
  232    19996K    5304K    2915K    2820K  /system/bin/logd
  381    18964K    9884K    2836K    1652K  /system/bin/drmserver
  266    14404K    6140K    2798K    2604K  /vendor/bin/hw/android.hardware.wifi@1.0-service
  258    12756K    6560K    2463K    1904K  /vendor/bin/hw/android.hardware.drm@1.0-service
  245    55064K    7468K    2421K    2024K  /system/bin/vold
  388    31004K    6548K    2225K    1980K  /system/bin/netd
  259    11140K    5328K    1985K    1588K  /vendor/bin/hw/android.hardware.drm@1.0-service.widevine
  383    19280K    6492K    1811K    1348K  /system/bin/keystore
  382    19676K    5636K    1809K    1616K  /system/bin/installd
    1    11968K    2436K    1714K    1092K  /init
  234    14408K    5576K    1653K    1352K  /system/bin/hwservicemanager
 1841    12932K    1700K    1511K    1504K  /system/bin/adbd
  390    15096K    5632K    1507K    1312K  /system/bin/wificond
  265    16888K    5044K    1439K    1164K  /vendor/bin/hw/android.hardware.sensors@1.0-service
  244    14848K    5904K    1422K     928K  /vendor/bin/hw/android.hardware.keymaster@3.0-service
  384    10688K    5308K    1297K     804K  /system/bin/mediadrmserver
  260    17480K    5224K    1261K     960K  /vendor/bin/hw/android.hardware.graphics.allocator@2.0-service
  393    15560K    5612K    1245K    1000K  /system/bin/gatekeeperd
  403     9468K    3296K    1244K    1188K  /system/bin/ip6tables-restore
  402     9452K    3200K    1165K    1116K  /system/bin/iptables-restore
  207     6080K    1768K    1158K     568K  /sbin/ueventd
 2038    16940K    3304K    1145K    1088K  procrank
  270    13924K    5000K    1142K     944K  /system/bin/thermalserviced
  389    15988K    4292K    1090K     960K  /system/bin/storaged
  254    12244K    4212K    1042K     868K  /vendor/bin/hw/android.hardware.bluetooth@1.0-service
  256     9048K    4108K    1018K     596K  /vendor/bin/hw/android.hardware.cas@1.0-service
  257    15372K    4372K    1017K     828K  /vendor/bin/hw/android.hardware.configstore@1.0-service
  267    13464K    4504K     993K     860K  /system/bin/healthd
  262    12136K    4168K     896K     676K  /vendor/bin/hw/android.hardware.light@2.0-service
  264    12140K    4168K     870K     668K  /vendor/bin/hw/android.hardware.power@1.0-service
  233    10444K    3428K     848K     760K  /system/bin/servicemanager
  235    10244K    3256K     805K     696K  /vendor/bin/vndservicemanager
  252    12088K    4088K     767K     636K  /system/bin/hw/android.hidl.allocator@1.0-service
 1983     8932K    3008K     736K     548K  /system/bin/sh
  274     8932K    2944K     727K     540K  /system/bin/sh
  268     9180K    3072K     681K     624K  /system/bin/lmkd
  395     9028K    3004K     662K     600K  /system/bin/tombstoned
                           ------   ------  ------
                          601566K  385996K  TOTAL

 RAM: 3938668K total, 2765940K free, 54772K buffers, 683920K cached, 117060K shmem, 119748K slab

2.5 showmap

该命令的输出每一行代表一个虚拟地址区域(vm_area),内容基本和proc/pid/maps基本一致.

# showmap -a 1302
   start      end  virtual                     shared   shared  private  private
    addr     addr     size      RSS      PSS    clean    dirty    clean    dirty     swap  swapPSSobject
    -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- ------------------------------
0b65b000 0b65c000        4        0        0        0        0        0        0        0        0 [anon:thread stack guard page]

start addr: 虚拟地址的起始地址
end addr: 虚拟地址的结束地址
virutal size: 占用虚拟内存大小
RSS:进程独占内存 + 共享库占用内存的物理内存
PSS:进程独占内存 + 比例分配共享库占用的物理内存
shared:共享数据
private:私有数据

2.6 vmstat

不仅可以查看内存情况,还可以查看进程运行队列、系统切换、CPU时间占比等情况.

免责声明:文章转载自《Android内存分析工具》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇poi操作word文档文件操作修改Kali Linux终端主题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C#快速删除bin和obj文件夹的方法

C#程序总会生成bin和obj文件夹,为了减小源码的大小,就有必要将这两个文件夹删除,于是想到用批处理文件来删除。 以下是批处理的代码: @echo offset nowPath=%cd%cd /cd %nowPath% ::delete specify file(*.pdb,*.vshost.*)for /r %nowPath% %%i in (*.pd...

Linux性能监控

一、CPU 良好状态指标 CPU利用率:User Time <= 70%,System Time <= 35%,User Time + System Time <= 70%。 上下文切换:与CPU利用率相关联,如果CPU利用率状态良好,大量的上下文切换也是可以接受的。 可运行队列:每个处理器的可运行队列<=3个线程。 监控工具 vm...

文件创建及读取的方法

以前创建用       String filePath = HttpContext.Current.Server.MapPath(FileName);        if (!System.IO.File.Exists(filePath))// 创建文件            System.IO.File.Create(filePath);       ...

WPF 创建桌面快捷方式

#region 创建桌面快捷方式 string deskTop = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop); string dirPath = System.Environment.CurrentDirectory;...

awk 调用 shell 命令,并传递参数

from:awk 调用 shell 命令的两种方法:system 与 print shell 向awk传递命令,这样使用即可: awk -v  ...  但反过来呢?awk调用外部命令,同时也传参呢?  awk 中使用的 shell 命令,有 2 种方法:一。使用所以 system()awk 程序中我们可以使用 system() 函数去调用 shell...

Android 实现连续两次点击或连续多次点击退出应用

前言:日常开发过程中,经常会遇到“连续点击两次退出应用”的需求(和“连续点击多次”的需求(如:手机从设置中进入开发者选项)。 直接上代码:双击退出: private long exitTime = 0; /** * 连续点击2次退出 */ public void exitAfterTwice() {...