Android下通过smaps获取内存

本文章转载于搜狗测试

最近某Android项目在进行内存的优化,一直以来内存的获取使用的是dumpsys meminfo命令获取的,但是由于其内存值不够详尽,后改用smaps获取,将此分享内容给大家。

获取内存方法一:dumpsys meminfo

在adb下输入如下命令:adb shell dumpsys meminfo

各个字段的含义:

这种方法获取内存可能存在一个问题:获取内存不够精准如果Android应用中的库文件,没有以.so后缀名结尾,那么这部分内存占用不会归为“.so mmap”中,而是归为"Other mmap"中。

获取内存方法二:smaps

在adb下输入如下命令:

adb -d shell ps | grepcom.sohu.inputmethod.sogou| awk '{print$2;}'  //打印被测应用的进程id

adb -d shell su --command=\'cat /[PID]/smaps >/sdcard\'  //把PID对应的smaps文件拷贝到手机的sdcard上。注意必须用cat,不能用cp

adb –d pull /sdcard/smaps  //下载smaps文件

解析smaps文件

文件结构:

400ca000-400cb000:本段虚拟内存的地址范围

r-xp:文件权限,r(读)、w(写)、x(执行)、p表示私有,s代表共享,如果不具有哪项权限用"-"代替

00000000:映射文件的偏移量

b3:11:文件设备号

1345:被映射到虚拟内存文件的映索节点

dumpsys meminfo 和 smaps的关系

dumpsys meminfo 命令下的 Pss、Shared Dirty、Private Dirty这三列的数据是读取smaps文件生成。

附录:

以下是对比搜狗手机输入法的.dex mmap、.ttf mmap、.so mmap与smaps中对应值的数据,从结果上来看,数据趋势是一样的。

Note:因为获取两种内存的工具读取时间不一样,所以曲线不会完全精准match。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容