diff --git a/zh-cn/application-dev/tools/rawheap-translator.md b/zh-cn/application-dev/tools/rawheap-translator.md index dff49abcc3a1d412a98dd506d2c3440750f902d8..435e368948af50ba58f0a9c21b4a38981ce37c15 100644 --- a/zh-cn/application-dev/tools/rawheap-translator.md +++ b/zh-cn/application-dev/tools/rawheap-translator.md @@ -80,166 +80,178 @@ rawheap_translator [heapsnapshot_file] 通过hdc shell命令拉起解析工具,设备内工具路径:/bin/rawheap_translator,推荐指定生成heapsnapshot文件路径在/data/local/tmp下,其他路径可能面临没有写权限问题。 ```bash > hdc shell /bin/rawheap_translator /data/log/reliability/resource_leak/memory_leak/memleak-js-com.example.myapplication-7979-7979-20241215191332.rawheap /data/local/tmp/myapplication-7979-7979.heapsnapshot -[INFO] Main: start to translate rawheap! -[INFO] Meta::ParseVersion: current metadata version is 1.0.0 -[INFO] Meta::ParseTypeEnums: parse type enums, size=213 -[INFO] Meta::ParseTypeList: parse type list, obj size = 214 -[INFO] Meta::ParseTypeLayout: parse type layout, size=1 -[INFO] Meta::ParseTypeLayout: parse type desc, size=4 -[INFO] Meta::SetObjTypeBitFieldOffset: offset=72 -[INFO] Meta::SetNativatePointerBindingSizeOffset: offset=32 -[INFO] RawHeapTranslate::ReadSectionInfo: sectionSize=6 -[INFO] Rawheap version is -[INFO] RawHeapTranslate::Translate: start to read objects -[INFO] RawHeapTranslate::ReadObjTable: read object, cnt=96432 -[INFO] RawHeapTranslate::Translate: read objects finish! -[INFO] RawHeapTranslate::ReadStringTable: read string table, cnt=11208 -[INFO] RawHeapTranslate::ReadRootTable: find root obj 6244 -[INFO] RawHeapTranslate::FillNodesAndBuildEdges: start to build edges! -[INFO] RawHeapTranslate::FillNodesAndBuildEdges: build edges finish! -[INFO] Main: start to serialize! -[INFO] HeapSnapshotJSONSerializer::Serialize begin -[INFO] HeapSnapshotJSONSerializer::Serialize exit -[INFO] Main: translate success! file save to /data/local/tmp/myapplication-7979-7979.heapsnapshot +[INFO ] ParseVersion current metadata version is 1.0.0 +[INFO ] ParseTypeEnums total JSType count 214 +[INFO ] ParseTypeList total metadata count 220 +[INFO ] SetBitField set BitField offset 8 +[INFO ] SetBitField set BindingSize offset 32 +[INFO ] SetBitField set Length offset 8 +[INFO ] SetBitField set Data offset 16 +[INFO ] ReadVersion current rawheap version is 1.0.0 +[INFO ] RawHeap start to translate rawheap +[INFO ] ReadRootTable root node count 6244 +[INFO ] ReadStringTable string table count 11208 +[INFO ] ReadObjTable section objects count 96432 +[INFO ] Translate success +[INFO ] Serialize start to serialize +[INFO ] Translate file save to /data/local/tmp/myapplication-7979-7979.heapsnapshot ``` ### Windows系统中解析示例 打开cmd并进入rawheap文件路径,调用解析工具命令,指定在当前路径下生成heapsnapshot文件。 ```bash > rawheap_translator.exe memleak-js-com.example.myapplication-7979-7979-20241215191332.rawheap myapplication-7979-7979.heapsnapshot -[INFO] Main: start to translate rawheap! -[INFO] Meta::ParseVersion: current metadata version is 1.0.0 -[INFO] Meta::ParseTypeEnums: parse type enums, size=213 -[INFO] Meta::ParseTypeList: parse type list, obj size = 214 -[INFO] Meta::ParseTypeLayout: parse type layout, size=1 -[INFO] Meta::ParseTypeLayout: parse type desc, size=4 -[INFO] Meta::SetObjTypeBitFieldOffset: offset=72 -[INFO] Meta::SetNativatePointerBindingSizeOffset: offset=32 -[INFO] RawHeapTranslate::ReadSectionInfo: sectionSize=6 -[INFO] Rawheap version is -[INFO] RawHeapTranslate::Translate: start to read objects -[INFO] RawHeapTranslate::ReadObjTable: read object, cnt=96432 -[INFO] RawHeapTranslate::Translate: read objects finish! -[INFO] RawHeapTranslate::ReadStringTable: read string table, cnt=11208 -[INFO] RawHeapTranslate::ReadRootTable: find root obj 6244 -[INFO] RawHeapTranslate::FillNodesAndBuildEdges: start to build edges! -[INFO] RawHeapTranslate::FillNodesAndBuildEdges: build edges finish! -[INFO] Main: start to serialize! -[INFO] HeapSnapshotJSONSerializer::Serialize begin -[INFO] HeapSnapshotJSONSerializer::Serialize exit -[INFO] Main: translate success! file save to myapplication-7979-7979.heapsnapshot +[INFO ] ParseVersion current metadata version is 1.0.0 +[INFO ] ParseTypeEnums total JSType count 214 +[INFO ] ParseTypeList total metadata count 220 +[INFO ] SetBitField set BitField offset 8 +[INFO ] SetBitField set BindingSize offset 32 +[INFO ] SetBitField set Length offset 8 +[INFO ] SetBitField set Data offset 16 +[INFO ] ReadVersion current rawheap version is 1.0.0 +[INFO ] RawHeap start to translate rawheap +[INFO ] ReadRootTable root node count 6244 +[INFO ] ReadStringTable string table count 11208 +[INFO ] ReadObjTable section objects count 96432 +[INFO ] Translate success +[INFO ] Serialize start to serialize +[INFO ] Translate file save to myapplication-7979-7979.heapsnapshot ``` ### Linux系统中解析示例 进入rawheap文件路径,调用解析工具命令,指定在当前路径下生成heapsnapshot文件。 ```bash > ./rawheap_translator memory_leak/memleak-js-com.example.myapplication-7979-7979-20241215191332.rawheap myapplication-7979-7979.heapsnapshot -[INFO] Main: start to translate rawheap! -[INFO] Meta::ParseVersion: current metadata version is 1.0.0 -[INFO] Meta::ParseTypeEnums: parse type enums, size=213 -[INFO] Meta::ParseTypeList: parse type list, obj size = 214 -[INFO] Meta::ParseTypeLayout: parse type layout, size=1 -[INFO] Meta::ParseTypeLayout: parse type desc, size=4 -[INFO] Meta::SetObjTypeBitFieldOffset: offset=72 -[INFO] Meta::SetNativatePointerBindingSizeOffset: offset=32 -[INFO] RawHeapTranslate::ReadSectionInfo: sectionSize=6 -[INFO] Rawheap version is -[INFO] RawHeapTranslate::Translate: start to read objects -[INFO] RawHeapTranslate::ReadObjTable: read object, cnt=96432 -[INFO] RawHeapTranslate::Translate: read objects finish! -[INFO] RawHeapTranslate::ReadStringTable: read string table, cnt=11208 -[INFO] RawHeapTranslate::ReadRootTable: find root obj 6244 -[INFO] RawHeapTranslate::FillNodesAndBuildEdges: start to build edges! -[INFO] RawHeapTranslate::FillNodesAndBuildEdges: build edges finish! -[INFO] Main: start to serialize! -[INFO] HeapSnapshotJSONSerializer::Serialize begin -[INFO] HeapSnapshotJSONSerializer::Serialize exit -[INFO] Main: translate success! file save to myapplication-7979-7979.heapsnapshot +[INFO ] ParseVersion current metadata version is 1.0.0 +[INFO ] ParseTypeEnums total JSType count 214 +[INFO ] ParseTypeList total metadata count 220 +[INFO ] SetBitField set BitField offset 8 +[INFO ] SetBitField set BindingSize offset 32 +[INFO ] SetBitField set Length offset 8 +[INFO ] SetBitField set Data offset 16 +[INFO ] ReadVersion current rawheap version is 1.0.0 +[INFO ] RawHeap start to translate rawheap +[INFO ] ReadRootTable root node count 6244 +[INFO ] ReadStringTable string table count 11208 +[INFO ] ReadObjTable section objects count 96432 +[INFO ] Translate success +[INFO ] Serialize start to serialize +[INFO ] Translate file save to myapplication-7979-7979.heapsnapshot ``` ### MacOS系统中解析示例 打开终端并进入rawheap文件路径,调用解析工具命令,指定在当前路径下生成heapsnapshot文件。 ```bash > rawheap_translator memory_leak/memleak-js-com.example.myapplication-7979-7979-20241215191332.rawheap myapplication-7979-7979.heapsnapshot -[INFO] Main: start to translate rawheap! -[INFO] Meta::ParseVersion: current metadata version is 1.0.0 -[INFO] Meta::ParseTypeEnums: parse type enums, size=213 -[INFO] Meta::ParseTypeList: parse type list, obj size = 214 -[INFO] Meta::ParseTypeLayout: parse type layout, size=1 -[INFO] Meta::ParseTypeLayout: parse type desc, size=4 -[INFO] Meta::SetObjTypeBitFieldOffset: offset=72 -[INFO] Meta::SetNativatePointerBindingSizeOffset: offset=32 -[INFO] RawHeapTranslate::ReadSectionInfo: sectionSize=6 -[INFO] Rawheap version is -[INFO] RawHeapTranslate::Translate: start to read objects -[INFO] RawHeapTranslate::ReadObjTable: read object, cnt=96432 -[INFO] RawHeapTranslate::Translate: read objects finish! -[INFO] RawHeapTranslate::ReadStringTable: read string table, cnt=11208 -[INFO] RawHeapTranslate::ReadRootTable: find root obj 6244 -[INFO] RawHeapTranslate::FillNodesAndBuildEdges: start to build edges! -[INFO] RawHeapTranslate::FillNodesAndBuildEdges: build edges finish! -[INFO] Main: start to serialize! -[INFO] HeapSnapshotJSONSerializer::Serialize begin -[INFO] HeapSnapshotJSONSerializer::Serialize exit -[INFO] Main: translate success! file save to myapplication-7979-7979.heapsnapshot +[INFO ] ParseVersion current metadata version is 1.0.0 +[INFO ] ParseTypeEnums total JSType count 214 +[INFO ] ParseTypeList total metadata count 220 +[INFO ] SetBitField set BitField offset 8 +[INFO ] SetBitField set BindingSize offset 32 +[INFO ] SetBitField set Length offset 8 +[INFO ] SetBitField set Data offset 16 +[INFO ] ReadVersion current rawheap version is 1.0.0 +[INFO ] RawHeap start to translate rawheap +[INFO ] ReadRootTable root node count 6244 +[INFO ] ReadStringTable string table count 11208 +[INFO ] ReadObjTable section objects count 96432 +[INFO ] Translate success +[INFO ] Serialize start to serialize +[INFO ] Translate file save to myapplication-7979-7979.heapsnapshot ``` ## 文件参考规格 rawheap文件大小、生成耗时,与当前ArkTS堆内存大小、存活对象数量强正相关(如下表所示),因此OOM场景下当ArkTS堆内存占用较大、存活对象数量较多时,生成的rawheap文件耗时会较长,文件也会较大。开发者可订阅[资源泄漏事件](../dfx/hiappevent-watcher-resourceleak-events.md),自定义事件处理逻辑。 -为了方便开发者判断上报rawheap文件到服务器所带来的性能和流量开销,下表还给出了当前rawheap文件被压缩后的文件大小,一般压缩比是10:1,不同压缩工具略有差异,仅供开发者参考。 +自API20之后,虚拟机支持两种规格的rawheap dump,详细如下: +| 规格 | 特点 | +| :---: | :---: | +| TRIM_LEVEL_1 | dump速度快,生成rawheap文件大 | +| TRIM_LEVEL_2 | dump速度稍慢,生成rawheap文件相比TRIM_LEVEL_1缩小40%左右 | -| ArkTS堆内存(MB) | 存活对象数量(个) | 生成耗时(s) | rawheap文件(MB) | 压缩后文件(MB) | -| :---------: | :--------------: | :-----------: | :----------: | :----------: | -| 11.00 | 99812 | 0.08 | 7.00 | 0.77 | -| 25.30 | 250059 | 0.17 | 19.00 | 1.90 | -| 50.40 | 496134 | 0.29 | 38.00 | 3.55 | -| 72.00 | 759037 | 0.49 | 54.00 | 4.77 | -| 104.00 | 47232 | 0.14 | 102.00 | 8.25 | -| 130.00 | 1308804 | 0.92 | 100.00 | 10.40 | -| 152.00 | 1493272 | 1.12 | 117.00 | 11.50 | -| 187.00 | 1838800 | 1.50 | 144.00 | 13.00 | -| 354.00 | 50704 | 0.31 | 352.00 | 27.25 | -| 643.00 | 7772538 | 2.63 | 444.00 | 51.00 | -| 750.00 | 6163456 | 3.64 | 605.00 | 59.55 | +为了方便开发者判断上报rawheap文件到服务器所带来的性能和流量开销,下表还给出了当前rawheap文件被压缩后的文件大小,一般压缩比是10:1,不同压缩工具略有差异,仅供开发者参考。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
规格堆大小(MB)rawheap文件(MB)生成耗时(s)解析耗时(s)
TRIM_LEVEL_16906292.6414
6536182.6313
5765633.6315
TRIM_LEVEL_26903763.4714
6533473.3613
5762944.5315
## 常见问题 ### 工具版本过低 工具解析时,提示:The rawheap file's version 1.1.0 is not matched the current rawheap translator, please use the newest version of the translator! ```bash -[INFO] Main: start to translate rawheap! -[INFO] Meta::ParseVersion: current metadata version is 1.0.0 -[INFO] Meta::ParseTypeEnums: parse type enums, size=213 -[INFO] Meta::ParseTypeList: parse type list, obj size = 214 -[INFO] Meta::ParseTypeLayout: parse type layout, size=1 -[INFO] Meta::ParseTypeLayout: parse type desc, size=4 -[ERRO] The rawheap file's version 1.1.0 is not matched the current rawheap translator, please use the newest version of the translator! +[INFO ] ParseVersion current metadata version is 1.0.0 +[INFO ] ParseTypeEnums total JSType count 214 +[INFO ] ParseTypeList total metadata count 220 +[INFO ] SetBitField set BitField offset 8 +[INFO ] SetBitField set BindingSize offset 32 +[INFO ] SetBitField set Length offset 8 +[INFO ] SetBitField set Data offset 16 +[INFO ] ReadVersion current rawheap version is 1.0.0 +[ERROR] ParseRawheap The rawheap file's version 1.1.0 is not matched the current rawheap translator, please use the newest version of the translator! ``` 原因:当前工具版本低于rawheap文件版本,升级工具可解决。 ### 文件没有权限 -工具解析时,提示:FileStream: open file failed! +工具解析时,提示:open file failed ```bash -[INFO] Main: start to translate rawheap! -[INFO] Meta::ParseVersion: current metadata version is 1.0.0 -[INFO] Meta::ParseTypeEnums: parse type enums, size=213 -[INFO] Meta::ParseTypeList: parse type list, obj size = 214 -[INFO] Meta::ParseTypeLayout: parse type layout, size=1 -[INFO] Meta::ParseTypeLayout: parse type desc, size=4 -[INFO] Meta::SetObjTypeBitFieldOffset: offset=72 -[INFO] Meta::SetNativatePointerBindingSizeOffset: offset=32 -[INFO] RawHeapTranslate::ReadSectionInfo: sectionSize=6 -[INFO] Rawheap version is -[INFO] RawHeapTranslate::Translate: start to read objects -[INFO] RawHeapTranslate::ReadObjTable: read object, cnt=96432 -[INFO] RawHeapTranslate::Translate: read objects finish! -[INFO] RawHeapTranslate::ReadStringTable: read string table, cnt=11208 -[INFO] RawHeapTranslate::ReadRootTable: find root obj 6244 -[INFO] RawHeapTranslate::FillNodesAndBuildEdges: start to build edges! -[INFO] RawHeapTranslate::FillNodesAndBuildEdges: build edges finish! -[INFO] Main: start to serialize! -[ERRO] FielStream: open file failed +[INFO ] ParseVersion current metadata version is 1.0.0 +[INFO ] ParseTypeEnums total JSType count 214 +[INFO ] ParseTypeList total metadata count 220 +[INFO ] SetBitField set BitField offset 8 +[INFO ] SetBitField set BindingSize offset 32 +[INFO ] SetBitField set Length offset 8 +[INFO ] SetBitField set Data offset 16 +[INFO ] ReadVersion current rawheap version is 1.0.0 +[INFO ] RawHeap start to translate rawheap +[INFO ] ReadRootTable root node count 6244 +[INFO ] ReadStringTable string table count 11208 +[INFO ] ReadObjTable section objects count 96432 +[INFO ] Translate success +[ERROR] Initialize open file failed ``` 原因:生成文件路径下没有写文件权限,指定到有写权限路径下可解决。参考路径:/data/local/tmp。