zoukankan      html  css  js  c++  java
  • Android内存分析工具

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

    文章参考:

    1.dumpsys

    2.memory-analysis-command

    1.内存的指标

    Item 全称 描述 类型
    USS Unique Set Size 进程独占的内存(不包含共享库占用的内存) 物理内存
    PSS Proportional Set Size 进程独占 + 比例分配共享库占用的内存 物理内存
    RSS Resident Set Size 进程独占 + 共享库占用的内存 物理内存
    VSS Virtual Set Size RSS + 未分配的物理内存 虚拟内存

    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时间占比等情况.

    Author: xujinlong Email: xyxujinlong@163.com
  • 相关阅读:
    【2020Python修炼记】面向对象编程——绑定方法与非绑定方法
    【2020Python修炼记】面向对象编程——多态性与鸭子类型
    2020Python作业——封装2+继承
    2020Python作业——类与对象2+封装
    【2020Python修炼记】面向对象编程——继承与派生
    P1494 [国家集训队]小Z的袜子
    codeforces600E. Lomsat gelral(dsu on tree)
    这是个O2优化指令
    洛谷P1972 [SDOI2009]HH的项链
    poj3417
  • 原文地址:https://www.cnblogs.com/tinylaker/p/10574899.html
Copyright © 2011-2022 走看看