内存泄漏终极杀器:page_owner

page owner用于跟踪每个页面的分配者。
可以用来调试内存泄漏或查找内存黑洞(uncount memory)。
当分配发生时,有关分配的信息(如调用堆栈和页面顺序)存储在每个页面的特定存储中。
当我们需要了解所有页面的状态时,我们可以获取并分析这些信息。

  • 使用方法
  1. 通过config配置打开

MTK:
CONFIG_PAGE_OWNER=y
CONFIG_PAGE_OWNER_SLIM=y

QCOM:
R之后的版本,还需要打开config中的debugfs
CONFIG_PAGE_OWNER=y
CONFIG_PAGE_OWNER_ENABLE_DEFAULT=y

  1. 使用Cmdline:
    adb reboot-bootloader
    fastboot oem append-cmdline page_owner=on
    fastboot continue

怎么判断是否已经成功的开启page owner:
$adb shell "cat /sys/kernel/debug/page_owner"
如果存在就代表开启成功了。

  • 抓取page owner 数据
  1. (推荐此法)
    adb pull /sys/kernel/debug/page_owner_slim 并检查

  2. 内核社区提供了page_owner的python解析脚本,简书没法粘贴附件,大家可自行下载

  3. 先编译生成page_owner_sort (page owner raw数据需过滤和排序增加可读性)
    cd tools/vm
    make page_owner_sort

抓取数据并过滤排序
adb root
adb push page_owner_sort /data
adb shell chmod 777 /data/page_owner_sort
adb shell "cat /sys/kernel/debug/page_owner > /data/page_owner_full.txt" //此为raw 数据
adb shell "grep -v ^PFN /data/page_owner_full.txt > /data/page_owner.txt" //过滤不必要数据, 空格等
adb shell "/data/page_owner_sort /data/page_owner.txt /data/sorted_page_owner.txt" //计数并排序
adb pull /data/sorted_page_owner.txt
检视分析 sorted_page_owner.txt

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

推荐阅读更多精彩内容