• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Native Memory抓取和展示说明
2Native Memory是查看内存的分配和释放等情况。
3## Native Memory的抓取
4### Native Memory抓取配置参数
5![GitHub Logo](../../figures/NativeMemory/nativememorysetting.jpg)
6配置参数说明:
7* ProcessId or ProcessName:设置抓取的进程ID或者进程名,此处以输入com.ohos.mms进程名为例。
8* Max unwind level:抓取的栈的最大深度。
9* Shared Memory Size:native_daemon和native_hook进程之间存储数据的共享内存大小。
10* Filter Memory Size:只抓取大于该size的malloc数据(free不受影响)。
11* Use Fp Unwind:Fp回栈。
12* Use Record Accurately:不过滤数据,上报全量的。
13* Use Offline Symbolization:离线符号化。
14* Use Record Statistics:统计数据上报。
15* statistics interval:统计数据上报周期。
16
17再点击Record setting,在output file path输入文件名hiprofiler_data_nativememory.htrace,拖动滚动条设置buffer size大小是64M,抓取时长是50s。
18![GitHub Logo](../../figures/NativeMemory/nativememoryset.jpg)
19
20点击Trace command,就会根据上面的配置生成抓取命令,点击复制按钮,会将命令行复制。
21![GitHub Logo](../../figures/NativeMemory/nativememorycommand.jpg)
22
23命令行参数说明:
24* save_file:是否将hook数据保存成文件,不上报protobuf形式数据给hiprofilerd。
25* filter_size:过滤malloc的大小,最小值是0,默认值是4096Byte。
26* smb_pages:nativedeamon与libnativehook间的共享内存大小。
27* max_stack_depth:最多回栈的层数,也就是抓取的栈的最大深度。
28* fp_unwind:是否进行fp回栈。
29* malloc_free_matching_interval:native_daemon从nativehook so的共享内存里取数据的间隔时间。
30* string_compressed:是否进行字符串压缩。
31* fp_unwind:fp回栈。
32
33输入hdc_std shell,进入设备,执行命令。
34![GitHub Logo](../../figures/NativeMemory/nativeexcutecommand.jpg)
35执行完成后,进入指定目录查看,在/data/local/tmp下就会生成trace文件。
36![GitHub Logo](../../figures/NativeMemory/naitvememoryfile.jpg)
37## Native Memory展示说明
38将抓取的nativememory文件导入到smartperf工具中查看,查看内存的分配和释放等情况。
39### Native Memory泳道图展示类型
40点击齿轮状的图标可以设置内存的展示单位。
41![GitHub Logo](../../figures/NativeMemory/NativeChart.jpg)
42+     Current Bytes:以申请内存的size绘制泳道图。
43+     Native Memory Density:以申请内存的数量绘制泳道图。
44+     All Heap&AnonuymousVM:malloc分配和mmap分配的总量。
45+     All Heap:malloc分配的内存。
46+     All Anonymous VM:mmap分配的内存。
47### Native Memory泳道图的框选功能
48可以对内存的数据进行框选,框选后在最下方的弹出层中会展示框选数据的统计表格,总共有四个tab页。
49Statistics的Tab页,主要显示了统计明细类型。
50![GitHub Logo](../../figures/NativeMemory/Statistics.jpg)
51+     Memory Type:内存的类型。
52+     Exsiting:框选区域内申请没有释放的大小。
53+     #Exsiting:框选区域内申请没有释放的次数。
54+     Transient:框选区域内释放的大小。
55+     #Transient:框选区域内释放的次数。
56+     Total Bytes:框选区间内申请的大小。
57+     #Total: 框选区间内申请的次数。
58+     Peak Value: 框选区间内内存申请的峰值。
59+     Exsiting/Total:框选区间内剩余的内存比上申请的内存,其中浅紫色是框选区间内申请的大小/整个时间轴(申请+释放的总大小),深紫色是框选区间内(申请+释放)的大小/整个时间轴(申请+释放的总大小)。
60
61Call Info的Tab页,主要显示了调用树详细类型。
62![GitHub Logo](../../figures/NativeMemory/CallInfo.jpg)
63+     Symble Name:每个内存分配的调用栈。
64+     Size:分配的总大小。
65+     Count:相同调用栈出现的次数。
66Native Memory的Tab页,主要显示了单次分配信息列表。
67![GitHub Logo](../../figures/NativeMemory/NativeMemory.jpg)
68+     Address:内存块的地址。
69+     Memory Type:内存分配的类型。
70+     Timestamp:时间戳信息。
71+     State:内存地址当前状态Existed 表示框选范围内未释放,Freed表示已释放。
72+     Size:该次申请分配内存的大小。
73+     Responsible Library :调用该函数的库。
74+     Responsible Caller  :调用该函数的方法。
75Snapshot List的Tab页,主要显示了各时刻内存的增长的差值。
76![GitHub Logo](../../figures/NativeMemory/Snapshotlist.jpg)
77+     Snapshot:标记的打点说明。
78+     Timestamp :时间戳信息。
79+     Net Growth :自从上次Snapshot的增长量,是计算的分配和释放的。
80+     Total Growth :自从上次Snapshot的增长量,是计算的每一次分配的。
81+     #Exsiting  :仍然存在的内存数。
82### Native Memory的辅助信息功能
83在Call Info和Native Memory的Tab页,点击选中某一行,右边画红线处会显示出该行调用栈的树结构信息。
84![GitHub Logo](../../figures/NativeMemory/nativecallstack.jpg)
85### Native Memory详细显示的过滤功能
86点击下方的All Allocations可以对Allocation的lifeSpan进行过滤,有三个选择:All Allocatios,Create & Exsiting,Create & Destroyed。
87![GitHub Logo](../../figures/NativeMemory/lifespan.jpg)
88+      All Allocations:所有的内存。
89+      Created & Exsiting:创建且被存活的内存。
90+      Created & Destroyed: 创建且被销毁的内存。
91点击下方的All Heap&Anonymous可以对内存类型进行过滤。
92![GitHub Logo](../../figures/NativeMemory/AllocationType.jpg)
93+     All Heap&AnonuymousVM:Heap和AnonuymousVM的总量。
94+     All Heap:malloc分配的内存。
95+     All Anonymous VM:mmap的匿名页。
96点击下方的Mark Snapshot可以在时间轴上打标签。出现小旗的标志,通过标注多个时间点。点击到Snapshot List标签页可以看到各个时间点的内存的增长值。
97![GitHub Logo](../../figures/NativeMemory/Generation.jpg)
98### Native Memory的火焰图功能
99点击callinfo左下角的柱状图的图标,会切换到火焰图页面。
100![GitHub Logo](../../figures/NativeMemory/nativeflame.jpg)
101进入到火焰图页面,火焰图的展示跟Callinfo的tab页的调用栈显示一致,鼠标放到色块上,悬浮框可以显示调用栈名称和size大小。
102![GitHub Logo](../../figures/NativeMemory/nativeflameshow.jpg)
103鼠标左键火焰图,会进入下一级界面,右键回到上一级。
104![GitHub Logo](../../figures/NativeMemory/nativeflamelevel2.jpg)
105### Native Memory数据统计功能
106选择Use Record Statistics和statistics interval配置项抓取的数据,只会显示Call Info的Tab页,Call Info相关功能同上。
107![GitHub Logo](../../figures/NativeMemory/statiscsCallInfo.jpg)
108
109