为方便开发者定位问题,应用在ArkWeb或JSVM的JS堆内存OOM(Out of Memory)时会自动进行HeapDump。此操作会将虚拟机当前堆上的所有对象信息保存在后缀为.rawheap的二进制文件中。开发者可使用js_rawheap_translator工具解析.rawheap文件,生成.heapsnapshot文件。该文件可通过DevEco Studio的Heap Snapshot离线导入或Chrome浏览器的开发者工具中的内存工具导入并查看。
此工具支持Windows、Linux和macOS平台,获取方法如下:
建议将js_rawheap_translator工具所在的路径配置为系统环境变量。这样可以在终端中直接使用工具,无需每次指定路径。
在不同系统中,环境变量的配置方法存在差异。以下提供一些配置示例,供开发者参考。
Windows环境变量设置方法(以Windows 10某版本为例)。
macOS环境变量设置方法(以macOS 15某版本为例)。
打开终端工具,执行以下命令。
echo $SHELL
根据步骤1的返回结果做如下对应处理。
a. 如果返回结果为/bin/bash,则执行以下命令:
echo 'export PATH=$PATH:/path/to/your/js_rawheap_translator' >> ~/.bash_profile source ~/.bash_profile
b. 如果返回结果为/bin/zsh,则执行以下命令:
echo 'export PATH=$PATH:/path/to/your/js_rawheap_translator' >> ~/.zshrc source ~/.zshrc
Linux环境变量设置方法。
打开终端工具,执行以下命令查看当前Shell。
echo $SHELL
根据步骤1的返回结果做如下对应处理。
a. 如果返回结果为/bin/bash,则执行以下命令:
echo 'export PATH=$PATH:/path/to/your/js_rawheap_translator' >> ~/.bash_profile source ~/.bash_profile
b. 如果返回结果为/bin/zsh,则执行以下命令:
echo 'export PATH=$PATH:/path/to/your/js_rawheap_translator' >> ~/.zshrc source ~/.zshrc
js_rawheap_translator --translate <input.rawheap> [--translate-out <output.heapsnapshot>] [v8 flags]
| 选项 | 必选 | 描述 |
|---|---|---|
| --translate <input.rawheap> | 是 | 需要解析的JS堆OOM时生成的.rawheap文件路径。 |
| --translate-out <output.heapsnapshot> | 否 | 解析生成的heapsnapshot文件路径,路径必须具有读写权限。 参数缺省时,默认为当前执行命令的路径。 参数给定时,文件的后缀名必须是heapsnapshot。 |
| [v8 flags] | 否 | 可附加v8相关的命令行参数。 |
Windows系统中解析示例
打开cmd并进入rawheap文件路径,调用解析工具命令,指定在当前路径下生成heapsnapshot文件。
> js_rawheap_translator.exe --translate test.rawheap --translate-out test.heapsnapshot
Linux系统中解析示例
进入rawheap文件路径,调用解析工具命令,指定在当前路径下生成heapsnapshot文件。
> ./js_rawheap_translator --translate test.rawheap --translate-out test.heapsnapshot
macOS系统中解析示例
打开终端并进入rawheap文件路径,调用解析工具命令,指定在当前路径下生成heapsnapshot文件。
> js_rawheap_translator --translate test.rawheap --translate-out test.heapsnapshot
仅指定输入文件,使用默认输出路径示例
> js_rawheap_translator --translate test.rawheap
参考输出
binary reader file size:xxxxx
[HeapDump]print header_: magic_: 0x56384844, dump_format_version_: 1, flags_: 0xf37 {...}, ... v8_version: 14.4.258.16, ...
[HeapDump][HeapDump]elapsed time: xxx.xxxxx ms
[HeapDump]fd closed