美文网首页Performance
Android下通过smaps获取内存

Android下通过smaps获取内存

作者: 夜境 | 来源:发表于2017-07-21 10:56 被阅读86次

    本文章转载于搜狗测试

    最近某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。

    相关文章

      网友评论

        本文标题:Android下通过smaps获取内存

        本文链接:https://www.haomeiwen.com/subject/qgljkxtx.html