一、统计方法说明
统计各进程的内存占用有两种方式:
- dumpsys meminfo processname
- heap+ion
测试工具大概率会使用第一种方式抓取数据,但是内存占用的详细拆解,需要针对heap+ion的方式进行拆解
二、ion数据
数据抓取
cat d/ion/ion_mm_heap 或 /proc/ion/ion_mm_heap 节点获取Ion的映射信息
数据拆解
MTK有一个解析ion buffer的脚本叫"ion_view_vxx.py"。解析思路如下:
- 先从如下格式的内容中拆解出client(即进程名)、size、pid等基本信息:
buffer heap_id size kmap ref hdl mod mva_cnt mva(dom0) mva(dom1) sec flag pid(alloc_pid) comm(client) v1 v2 v3 v4 dbg_name
time 4 8564945 ms
0x000000004a9f889d 12 2359296 0 2 1 -1 1 5c100000(0) 0(0) 0x0, 0x3, 980( 980) camerahalserver 0x43 0x61 0x6d 0x0 2359296x1-BLOB-Stuff:Hal:Image:STT_main1:1_Blob
解析脚本:
re_buf_list5 = re.compile('^(0x[0-9a-f]+)\s+[-\d]+\s+(\d+)\s+[-\d]+\s+[-\d]+\s+[-\d]+\s+[-\d]+\s+[-\d]+\s+(\S+)\(\S+\)\s+\S+\(\S+\)\s+\S+\s+\S+\s+(\d+)\(\s*(\d+)\)\s+(\S+)\s+\S+\s+\S+\s+\S+\s+\S+\s+(\S+.*)')
符号 | 含义 | 对应字串中的内容 |
---|---|---|
(0x[0-9a-f]+) | 0x字串+多个十六进制数字的重复,并可以使用group(1)获取对应值 | 0x000000004a9f889d |
\s+ | 多个空白符 | |
[-\d]+ | 多位十进制数 | 12 |
\s+ | 多个空白符 | |
(\d+) | 多位十进制数字,并可以使用group(2)获取对应值 | 2359296 |
\s+ | 多个空白符 | |
[-\d]+ | 多位十进制数 | 0 |
\s+ | 多个空白符 | |
[-\d]+ | 多位十进制数 | 2 |
\s+ | 多个空白符 | |
[-\d]+ | 多位十进制数 | 1 |
\s+ | 多个空白符 | |
[-\d]+ | 负号或数字的多位重复 | -1 |
\s+ | 多个空白符 |