Android内存分析工具

时间:2022-12-23 23:28:53

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

Android内存分析工具的更多相关文章

  1. Android 内存分析工具 MAT(Memory Analyzer Tool)

    如果使用DDMS确实发现了我们的程序中存在内存泄漏,那又如何定位到具体出现问题的代码片段,最终找到问题所在呢?如果从头到尾的分析代码逻辑,那肯定 会把人逼疯,特别是在维护别人写的代码的时候.这里介绍一 ...

  2. Android内存分析工具DDMS heap + MAT 安装和使用

    一  Java内存分析工具扫盲 如果像我一样一点都不了解,可以先进行内存分析工具扫盲   MAT介绍:     Eclipse Memory Analyzer(MAT)一个功能丰富的 JAVA 堆转储 ...

  3. Android 内存分析工具 - LogCat GC

    一.GC_Reason 触发垃圾回收的回收的集中原因: 类型 描述 GC_CONCURRENT 内存使用将满时,并发的进行垃圾回收. GC_FOR_MALLOC 当内存已满应用尝试分配内存时会出触发垃 ...

  4. android--------Android内存分析工具的使用

    内存分析(in-memory analytics)是我们编写速度快.效率高的代码必不可少的知识.如果自己编写的代码在内存的分配一无所知,我想这样的程序让你去优化,应该是无从下手的.那么内存分析是什么? ...

  5. Android内存优化(三)详解内存分析工具MAT

    前言 在这个系列的前四篇文章中,我分别介绍了DVM.ART.内存泄漏和内存检测工具的相关知识点,这一篇我们通过一个小例子,来学习如何使用内存分析工具MAT. 1.概述 在进行内存分析时,我们可以使用M ...

  6. 记一次Android内存分析过程

    前言 上周五的时候,祝峰找到我,反映了Android收银台买单结果页内存飙升的问题.我在自己的机器上也试着重现了一下,发现从支付台-微信支付成功并返回后,进入买单结果页的内存会突然增大,导致GC,如图 ...

  7. 正确使用Android性能分析工具——TraceView

    http://blog.jobbole.com/78995/     首页 最新文章 IT 职场 前端 后端 移动端 数据库 运维 其他技术 - 导航条 - 首页 最新文章 IT 职场 前端 - Ja ...

  8. android--------Eclipse中ddms heap内存分析工具

    无 论怎么小心,想完全避免bad code是不可能的,此时就需要一些工具来帮助我们检查代码中是否存在会造成内存泄漏的地方. Android tools中的DDMS就带有一个很不错的内存监测工具Heap ...

  9. [原创]推荐一款强大的.NET程序内存分析工具.NET Memory Profiler

    [原创]推荐一款强大的.NET程序内存分析工具.NET Memory Profiler 1 官方网站:http://memprofiler.com/2 下载地址:http://memprofiler. ...

随机推荐

  1. JAVAWEB项目如何实现验证码

    验证码基础 一.什么是验证码及它的作用 :验证码为全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计算机的公共全自动程序,这个问题可以由计算机生成并评判,但是必须只有人类才能解答.可以防止恶意 ...

  2. jQuery Easing动画效果扩展(转)

    jQuery API提供了简单的动画效果如淡入淡出以及自定义动画效果,而今天我给大家分享的是一款jQuery动画效果扩展增强插件jquery.easing.js,使用该插件可以实现直线匀速运功.变加速 ...

  3. https加密

    对称加密  客户端和服务器使用同一把钥匙,加密算法公开 非对称加密  不同钥匙,公钥加密的私钥可以打开 私钥加密的公钥可以打开 HTTPS关键: 1. 要传输的业务数据,使用对称加密. 客户端生成私钥 ...

  4. Segment(技巧 相乘转换成相加 + java)

     Segment Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Sta ...

  5. Android开发:组播(多播)与广播

    近期由于需要编写能够使同一局域网中的Android客户端与PC端进行自动匹配通信功能的程序,学习并试验了JAVA组播与广播的内容,记录一些理解如下: 一.组播(多播) 背景知识:组播使用UDP对一定范 ...

  6. freemarker报错之十三

    1.错误描述 freemarker.core.ParseException: Token manager error: freemarker.core.TokenMgrError: Unknown d ...

  7. Exception: Exception caught in workbook destructor. Explicit close() may be required for workbook. 错误解决办法

    # 写入表格 writer = pd.ExcelWriter('data.xlsx') new_df.to_excel(writer, sheet_name='sheet', index=True) ...

  8. bootstrap modal 移除数据

    有时业务需求,在弹出模态框时需要动态的展示,但是不做处理时,每次弹出的都是第一次的数据,所以需要监听模态框关闭,每次关闭需要先清除里面的数据. //监听弹页关闭 $("#myModal&qu ...

  9. php处理手机号中间的四位为星号****

    在显示用户列表的场景中,一般用到手机号的显示时都需要对手机号进行处理,一般是把中间的四位换成星号****,我本人用php处理的思路是进行替换,用****替换手机号的中间四位 代码如下: $all_lo ...

  10. 关于windows10的使用

    关于windows10的使用 个人习惯设置 打开我的电脑之后,不是定位到此电脑,而是定位到快速访问. [解决办法] 用win + 箭头 快捷键将窗口靠边之后,另一边出现多个窗口 [解决办法] win ...