zt:android 内存分析

一、概述

1.1 内存指标概念

Item全称含义等价

USSUnique Set Size物理内存进程独占的内存

PSSProportional Set Size物理内存PSS= USS+ 按比例包含共享库

RSSResident Set Size物理内存RSS= USS+ 包含共享库

VSSVirtual Set Size虚拟内存VSS= RSS+ 未分配实际物理内存

故内存的大小关系:VSS >= RSS >= PSS >= USS

1.2 内存分析命令

常用的内存调优分析命令:

dumpsys meminfo

procrank

cat /proc/meminfo

free

showmap

vmstat

二 命令说明

1. dumpsys meminfo

dumpsys meminfo命令的输出结果分以下4部分:

序列划分类型排序解释

1processPSS以进程的PSS从大到小依次排序显示,每行显示一个进程;

2OOM adjPSSNative/System/Persistent/Foreground/Visible/Perceptible/A Services/Home/B Services/Cached,分别显示每类的进程情况

3categoryPSS以Dalvik/Native/.art mmap/.dex map等划分的各类进程的总PSS情况

4total-总内存、剩余内存、可用内存、其他内存

命令内容:

Total PSS by process://以process来划分

167128kB: com.android.systemui (pid4395)

124527kB: system (pid1192)

44213kB: com.android.settings (pid29256/ activities)

41822kB: surfaceflinger (pid391)

Total PSS by OOM adjustment://以oom来划分,会详细列举所有的类别的进程,此处省略.

183683kB: Native42024kB: surfaceflinger (pid388)

16740kB: mediaserver (pid471)

16040kB: zygote (pid494)

…124527kB: System

344259kB: Persistent

69719kB: Foreground

49026kB: Visible

34005kB: Perceptible

7880kB: A Services

58689kB: Home

98352kB: B Services

94888kB: Cached

Total PSS by category:// 以category划分

309449kB: Dalvik

230330kB: Native

45344kB: EGL mtrack

117797kB: .so mmap

54389kB: .art mmap

44886kB: .dex mmap

32428kB: Dalvik Other

31083kB: .oat mmap

29456kB: Stack

21782kB: Gfx dev

21733kB: Unknown

12695kB: .apk mmap

9367kB: Other mmap

2169kB: .ttf mmap

2062kB: Other dev

38kB: .jar mmap

12kB: Ashmem

8kB: Cursor

0kB: GL mtrack

0kB: Other mtrack//整体情况Total RAM:2857032kB (status moderate)

Free RAM:1439488kB (94888cached pss +344620cached kernel +999980free)

Used RAM:1280552kB (970140used pss +310412kernel)

Lost RAM:136992kB

ZRAM:4kB physical usedfor0kBinswap (524284kB total swap)

Tuning:256(large512), oom525000kB, restore limit175000kB (high-end-gfx)

另外,可只输出某个pid或package的进程信息:

dumpsys meminfo // 输出指定pid的某一进程dumpsys meminfo –package// 输出指定包名的进程,可能包含多个进程

2. procrank

功能: 获取所有进程的内存使用的排行榜,排行是以Pss的大小而排序。procrank命令比dumpsys meminfo命令,能输出更详细的VSS/RSS/PSS/USS内存指标。

最后一行输出下面6个指标:

totalfreebufferscachedshmemslab

执行结果:

root@Phone:/# procrankPID      Vss      Rss      Pss      Uss  cmdline43952270020K202312K136099K121964K  com.android.systemui11922280404K147048K89883K84144K  system_server292562145676K97880K44328K40676K  com.android.settings5011458332K61876K23609K9736K  zygote42392105784K68056K21665K19592K  com.android.phone479164392K24068K17970K15364K  /system/bin/mediaserver391200892K27272K15930K11664K  /system/bin/surfaceflinger…RAM:2857032K total,998088K free,78060K buffers,459780K cached,312K shmem,92392K slab

3. cat /proc/meminfo

功能:能否查看更加详细的内存信息

指令: cat /proc/meminfo

对于cache和buffer也是系统可以使用的内存。所以系统总的可用内存为 MemFree+Buffers+Cached

4.free

主功能:查看可用内存,缺省单位KB。该命令比较简单、轻量,专注于查看剩余内存情况。数据来源于/proc/meminfo。

5. showmap

主功能:用于查看虚拟地址区域的内存情况

用法:showmap-a[pid]

6. vmstat

主功能:不仅可以查看内存情况,还可以查看进程运行队列、系统切换、CPU时间占比等情况,另外该指令还是周期性地动态输出。

小结

dumpsys meminfo适用场景: 查看进程的oom adj,或者dalvik/native等区域内存情况,或者某个进程或apk的内存情况,功能非常强大;

procrank适用场景: 查看进程的VSS/RSS/PSS/USS各个内存指标;

cat /proc/meminfo适用场景: 查看系统的详尽内存信息,包含内核情况;

free适用场景: 只查看系统的可用内存;

showmap适用场景: 查看进程的虚拟地址空间的内存分配情况;

vmstat适用场景: 周期性地打印出进程运行队列、系统切换、CPU时间占比等情况;

    原文作者:自由人是工程师
    原文地址: https://www.jianshu.com/p/c8020f62cb9a
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞