閉眼能敲,Android內存分析command

Android常用內存分析命令

1.procrank
獲取所有進程的內存使用的排行榜,按PSS排序

2.free
查看可用內存,單位KB

3.cat /proc/meminfo
查看系統(tǒng)整體內存情況,內存項按類型分類
MemAvailable ≈ MemFree+Buffers+Cached
每個進程的kernel stack 是16K,根據(jù)這個可以判斷后臺進程數(shù)

  • MemAvailable = free - kernel reserved memory + ative file + inactive file + SReclaimable - 2 * zone low water mark
  • Cached = All file page - buffers - swapping = Active file + Inactive file + Unevictable file - Buffers
  • Slab = SReclaimable + SUnreclaimable
  • Active = Active(anon) + Active(file)
  • Inactive = Inactive(anon) + Inactive(file)
  • AnonPages + Buffers + Cached = Active + Inactive
  • Buffers + Cached = Active(file) + Inactive(file)
  • SwapTotal = SwapFree + SwapUsed(Not SwapCached)
  • KernelStack = the number of kernel task * Stack Size(16K)
  • Kernel Memory Usage = KernelStack + USlab + PageTables + Shmem + Vmalloc
  • Native Memory Usage = Mapped + AnonPages + Others
  1. dumpsys meminfo
    打印整體所有進程的內存使用,詳細每個指標介紹寫在《內存使用情況與監(jiān)測》中

  2. dumpsys meminfo [pid | packageName]
    針對具體進程or包名指行dump操作

6.cat /proc/pid/oom_score_adj
查看進程內存查殺優(yōu)先級,-1000~1000范圍,系統(tǒng)進程-1000,前臺進程0,cache在900后

7.sys/module/lowmemorykiller/parameters/minfree
sys/module/lowmemorykiller/parameters/adj
舊版本lowmemorykiller使用的水位,Android R以后可以使用getprop |grep minfree查看

8.tombstone可以看虛擬內存的map

9.紅屏異常等看SYSTEM_MEM_LOG 確認是否內存泄漏

10.cat /sys/kernel/debug/page_owner

  1. cat sys/kernel/slab/kmalloc-128

12.內核也提供了接口給用戶觸發(fā)規(guī)整動作,接口如下:/proc/sys/vm/compact_memory
只要往這個節(jié)點寫值即可觸發(fā)對系統(tǒng)所有node管理的內存做內存規(guī)整。

13.查看安卓后臺cache 應用,一般8G設置為64,12G設置為128,6G設置為32,4G設置為16或者8
dumpsys activity settings |grep CUR_MAX_CACHED_PROCESSES

14.內核內存申請失敗or超時log
查看kernel log打印:page allocation stalls for xxx ms 一般超過1s都是比較嚴重了

  1. event.log 中搜索am_pss可以看各進程占用,搜索killinfo可以查看lmkd查殺進程信息

    看log發(fā)現(xiàn)申請內存時order = 2的大?。ㄒ簿褪?6KB),但buddy system 16KB的內存池只有:19*16kB (H)
    其中的標志H表示這是highatomic的,禁止偷頁。只有傳進來的gfp_mask帶有GFP_ATOMIC才能申請reserve的內存,所以發(fā)生了kernel OOM。

這題明顯是內存碎片化。

  1. dumpsys activity lmk 統(tǒng)計lmk打印

  2. dumpsys meminfo 中的lostram統(tǒng)計

long lostRAM = memInfo.getTotalSizeKb() - (totalPss - totalSwapPss) - memInfo.getFreeSizeKb() - memInfo.getCachedSizeKb() - memInfo.getKernelUsedSizeKb() - memInfo.getZramTotalSizeKb();

18.DDR實時頻率(雖然沒啥用)
cat /sys/kernel/debug/clk/measure_only_mccc_clk/clk_measure

  1. cat /proc/pagetypeinfo 查看當前buddy信息
    (blocksize 和CONFIG_HUGETLB_PAGE有關,打開為2M,關閉為4M )

  2. cat /proc/zoneinfo 查看當前zone信息
    zoneinfo_show_print -> node_page_state 讀pglist_data的vm_stat計數(shù)器

spanned  2095616      內存管理區(qū)包含的頁面
present  1980484        內存管理區(qū)實際管理的頁面
managed  1921719     內存管理區(qū)被buddy管理的頁面
protection: (0, 0)          預留的內存
 
node_unreclaimable:  0   頁面回收失敗次數(shù)
start_pfn:           525824   內存管理區(qū)的起始頁幀號
  1. cat /proc/$pid/status |grep -E 'Name|Pid|Vm|Rss|Vm|Hu'
    進程相關的內存信息
#include<linux/mm_type.h>
enum {
    MM_FILEPAGES,   /* Resident file mapping pages */
    MM_ANONPAGES,   /* Resident anonymous pages */
    MM_SWAPENTS,    /* Anonymous swap entries */
    MM_SHMEMPAGES,  /* Resident shared memory pages */
    MM_UNRECLAIMABLE,   /* Unreclaimable pages, e.g. shared with HW */
    NR_MM_COUNTERS
};
  1. /proc/sys/vm 目錄下均是調優(yōu)參數(shù)
    定義在kernel/sysctl.c中,通過proc文件系統(tǒng)實現(xiàn)
static struct ctl_table vm_table[] = {
{  
    .procname = "overcommit_memory",       
    .data          = &sysctl_overcommit_memory, //傳遞的參數(shù),通常是某個全局變量
    .maxlen     = sizeof(sysctl_overcommit_memory),  //data的長度
    .mode        = 0644,  //節(jié)點的文件權限,用戶可讀寫,其他只讀
    .proc_handler = proc_dointvec_minmax,   //節(jié)點在內核中的回調函數(shù)
    .extra1      = &zreo,   //這個參數(shù)的最小值
    .extra1      = &two,    //這個參數(shù)的最大值
},
...
}
  1. /proc/iomem 也提供了有關物理內存劃分出的各個段的一些信息。
wolfgang@meitner> cat /proc/iomem

00000000-0009e7ff : System RAM

0009e800-0009ffff : reserved

000a0000-000bffff : Video RAM area

000c0000-000c7fff : Video ROM

000f0000-000fffff : System ROM

00100000-17ceffff : System RAM

00100000-00381ecc : Kernel code

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容