內存泄漏終極殺器:page_owner

page owner用于跟蹤每個頁面的分配者。
可以用來調試內存泄漏或查找內存黑洞(uncount memory)。
當分配發(fā)生時,有關分配的信息(如調用堆棧和頁面順序)存儲在每個頁面的特定存儲中。
當我們需要了解所有頁面的狀態(tài)時,我們可以獲取并分析這些信息。

  • 使用方法
  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. 內核社區(qū)提供了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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
禁止轉載,如需轉載請通過簡信或評論聯(lián)系作者。

相關閱讀更多精彩內容

友情鏈接更多精彩內容