Android dumpsys meminfo 流程分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android dumpsys meminfo 流程分析相关的知识,希望对你有一定的参考价值。

参考技术A [toc]

我们使用 adb shell dumpsys meminfo <包名> 的时候,会输出应用的内存信息。

该功能是以一种系统服务的形式,被注册到 ServiceManager 中,等待 binder 的调用。

在系统启动的时候,在 Systemerver 中会开启一系列的系统服务,

1.1 -> frameworks/base/services/java/com/android/server/SystemServer.java

1.2 ->frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

通过上文,我们知道了 dumpsys meminfo 的实现是通过 一个 Binder 在 ServiceManager 中

具体的实现在 MemBinder 中,该类为 AMS 的内部类

2.1 ->frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

2.2 ->frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

我们再来看 AMS 的方法

2.3 ->frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

ASM 中获取内存信息的方法,包括了读取 smaps

关键的统计内存方法,Graphics+smaps

3.1 -> frameworks/base/core/java/android/os/Debug.java

3.2 -> frameworks/base/core/jni/android_os_Debug.cpp

3.3 -> frameworks/base/core/jni/android_os_Debug.cpp#load_maps

关键的数据读取操作,这里关系到 linux 内存管理的 smaps。

3.3.1 -> frameworks/base/core/jni/android_os_Debug.cpp

smaps 文件内存归类

3.4 -> frameworks/base/core/jni/android_os_Debug.cpp#read_memtrack_memory

获取 Graphics 内存

3.4.1-> frameworks/base/core/jni/android_os_Debug.cpp#read_memtrack_memory

根据 libmemtrack 获取进程正在使用的 Graphics 内存,在 smaps 文件中统计的 graphics 都不包含此部分

以上是关于Android dumpsys meminfo 流程分析的主要内容,如果未能解决你的问题,请参考以下文章

android dumpsys meminfo 详解

在android中查询“dumpsys meminfo”

Android使用procrank和dumpsys meminfo分析内存占用情况

Android 内存优化dumpsys meminfo PID 查看单进程内存信息详解

Android 内存优化dumpsys meminfo PID 查看单进程内存信息详解

dumpsys meminfo 详解