资源泄漏日志采集&分析工具mem-analyzer概览和使用指导
头像 鸿蒙小助手 2026-09-08 16:26:36    发布
0 浏览 0 点赞 0 收藏

本原创文章帖发布在华为开发者联盟社区,欢迎开发者前往访问评论交流,更多与该内容相关讨论,请点击原帖查看:

资源泄漏日志采集&分析工具mem-analyzer概览和使用指导-华为开发者话题 | 华为开发者联盟


1、 mem-analyzer工具概览

      ① 工具下载:

      https://gitcode.com/ancimoon/developtools_dfx_mem_analyzer/releases?ha_source=zxqy-IT&ha_sourceId=89000468

      ② 源码下载:

      https://gitcode.com/ancimoon/developtools_dfx_mem_analyzer?ha_source=zxqy-IT&ha_sourceId=89000468

      ③ 使用指导:

      https://gitcode.com/ancimoon/developtools_dfx_mem_analyzer/blob/master/docs/usage.md?ha_source=zxqy-IT&ha_sourceId=89000468

1.1 为什么需要一个资源泄漏日志采集与分析工具

资源泄漏日志采集的痛点

      • 快照采集:hidumper --mem-jsheap 功能多,但是使用门槛高。需要熟悉使用哪些参数,什么时间采集完成,日志存放在哪里,如何导出等。

      • 内存Trace采集: hiprofiler命令行和IDE工具参数多(几十个参数),使用门槛高。不知道如何配置才能达到最优效果,NativeHeap、Global/LocalHandle、DMA、FD不同类型日志怎么采集也比较复杂。

资源泄漏日志分析的痛点

      • 入门难:拿到一堆工具和日志文件,不知道如何开始。

      数据多:内存trace和ArkTS堆中有海量数据,找不到重点。

      分析难:依赖专家经验,不知道日志中哪些信息代表可能有泄漏。

      自动化难:需写脚本分析各种日志格式,难以集成到已有的企业流水线和个人工具流程中。

mem-analyzer:一条命令,从采集到分析全链路覆盖

      • 统一采集六种内存资源

      • 自动识别泄漏热点

      • 生成交互式HTML报告

      • 支持ArkTS/Native/Handle分析

      • 流水线可集成

1.2 mem-analyzer功能全景介绍

      六大采集类型 · 三大分析引擎

1.3 引用链分析方法,根据根节点类型和引用路径完成问题分析

      引用链:起点是根节点对象,结束点是实例对象,中间节点是引用路径,找到关键引用节点,解除引用关系。


关键分析

      • ArkUI组件与ArkTS对象分析:相关组件和对象生命周期已经结束,GC后未释放的组件,建议根据引用链,找到关键节点,及时解除引用关系,避免泄漏。

      • 最短引用链分析:建议先根据大小和数量等信息, 找到TOP疑点对象,然后再根据引用链,找到关键节点,及时解除引用关系,避免泄漏。

1.4 调用链分析方法,火焰图与冰柱图:可视化调用栈泄漏分布

火焰图即上层调用链,冰柱图即下层调用链, 从顶层到底层即可看出函数调用关系,顶层是起始点。

火焰图(Flame Graph)· 自顶向下

冰柱图(Icicle Graph)· 自顶向下

关键分析

      •宽度代表泄漏量:方块越宽,该函数路径的泄漏越大。

      •点击缩放:点击任意方块可放大该调用路径,查看更详细的子调用;右键可复制符号名和调用链。

      •两种视图互补:火焰图适合看“谁调用了目标函数分配了内存”,冰柱图适合看“目标函数调用谁分配了内存"。

实际样例

2、效果展示与案例分析

2.1 ArkTS快照日志采集、分析

2.1.1 效果示例1:采集ArkTS快照,分析组件泄漏和TOP引用链

# 导出“泄漏演示”测试应用的ArkTS堆快照,自动分析后打开报告,工具会根据应用名称自动查询包名。

mem-analyzer profiler 泄漏演示 -c snapshot –o



注:快照导出仅支持debug签名应用

2.1.2 ArkTS快照日志泄漏分析(JsLeak)-AKUI组件/ArkTS对象泄漏分析

1. 通过对象名称聚类

2. 根据聚类后的总大小排序

3. 分析引用关系

4. 根据属性名判断组件类型

2.1.3 案例:通过引用链分析Ability组件泄漏

泄漏原因分析,Ability创建时将自身this放入一个对象的instance属性,后又将对象放入了一个数组,这个数组被模块级变量持有导致泄漏。

2.2 NativeHeap日志采集、分析

2.2.1 效果示例2:抓取NativeHeap内存日志,分析TOP函数与调用链

# 智能拉起应用,采集应用的内存分配栈,自动分析TOP函数与调用链,自动展示分析报告

      mem-analyzer profiler 泄漏演示 -c nativeheap -o


2.2.2 Htrace日志泄漏分析-NativeHeap、DMA、FD等分析

1. 找到TOP函数,根据函数名聚类。

2. 根据聚类后的总大小排序。

3. 分析有疑点的函数的调用链,找到代码行。

2.3 ArkTS Handle日志采集、分析

2.3.1 效果示例3:抓取ArkTS Handle日志,分析Global/Local Handle

# 采集 local handle 日志时,会自动重启应用并采集

mem-analyzer profiler 泄漏演示 -c handle -o

注:ArkTS Handle日志导出需debug签名应用且系统版本7.0.0.102开始才支持

2.3.2 GlobalHandle引用ArkTS对象日志分析

1. 优化基础节点名称,根据对象名聚类

2. 根据聚类后的总大小排序

3. 分析TOP对象的引用的创建堆栈(调用链)

2.3.3 案例:分析GlobalHanlde全局句柄泄漏

泄漏原因分析,通过napi接口持有了ArkTS对象的全局句柄,但是没有调用napi_delete_reference,导致对象无法释放。

2.3.4 LocalHandle引用ArkTS对象日志分析

1. 优化基础节点名称,根据对象名聚类。

2. 根据聚类后的总大小排序。

3. 分析TOP对象的引用的创建堆栈(调用链),找到问题代码。

2.3.5 案例:分析LocalHanlde局部句柄泄漏

泄漏原因分析:在libuv中通过napi接口创建对象,创建String没有被napi_open_handle_scope包含,造成永久泄漏。

1. 通过堆栈可以找到创建相关ArkTS对象的底层函数。

2. 通过对象名可以找到具体的ArkTS对象。

2.4 已有堆快照日志分析

2.4.1 效果示例4:直接分析已有的堆快照

# 分析已导出的快照,并自动打开分析报告

./mem-analyzer jsleak ~/Downloads/hidumper-jsheap-63074-63074-1787051285526.rawheap –o

2.4.2 ArkTS快照日志泄漏分(JsLeak)-最短引用链分析

1. 优化基础节点名称,分析节点最短引用链。

2. 根据引用链聚类。

3. 根据聚类后的总大小排序,分析有疑点的节点数和引用链。

2.4.3 通过资料文档可以快速找到更多资料,通过帮助中心可以快速开始

3、使用指导和模块介绍

3.1 mem-analyzer解压即用,一条命令出报告

安装

解压对应平台压缩包即可使用:

Windows: mem-analyzer.exe

macOS: ./mem-analyzer (arm64/x86_64)

Linux: ./mem-analyzer

命令结构

mem-analyzer [全局选项] [子命令] [选项] <文件...>

全局选项: -d 输出目录 -p 仅解析 -o 自动打开 -f json/html

子命令: profiler / trace / tshandle / jsleak(不指定则自动检测)

常用命令示例


# 采集60秒 nativeheap(nh) 并自动生成报告
mem-analyzer profiler -c nh -t 60 -o com.example.app
# 自动检测文件类型并分析
mem-analyzer -o hiprofiler_data.htrace
# 分析堆快照,显示 Top 20 引用链
mem-analyzer jsleak -n 20 -o hidumper-jsheap.heapsnapshot

3.2 日志采集模块—profiler

profiler:一条命令完成设备端采集与分析

核心能力

• 环境自检:hdc可用性 / 设备连接 / API版本

      • 进程名解析:支持包名或应用名模糊匹配

      • 应用自动拉起,采集期间随时 Ctrl+C 停止

      • -o 参数:采集后自动生成 HTML 报告并打开

采集命令示例

# 采集60秒 nativeheap(nh),自动出报告

mem-analyzer profiler -c nh -t 60 -o 泄漏演示

# 采集 ArkTS 堆快照(应用需已运行)

mem-analyzer profiler -c snap -o com.example.app

# 列出设备上已安装的应用

mem-analyzer profiler --list-apps

采集流程四步走

3.3 ArkTS快照分析模块—jsleak

jsleak:ArkTS堆快照泄漏分析,组件泄漏分析与最短引用链分析

三大核心分析能力

      • 组件泄漏识别— 识别 isDeleting_ / _isDisposed / isDestroyed 标记的已销毁组件对象

      • 最短引用链分析—计算保留大小

      • 特殊对象易用改进-JSObject(增加属性数量,关键属性显示),String显示长度,Observed对象(增加显示业务对象名称)

分析模式与命令(-m)

      • all(默认)— 属性标签 + 引用链全分析

      • property-tag / pt— 仅属性标签检测

   • top-chain / tc— 仅最短引用链


# 分析堆快照,自动打开报告
mem-analyzer jsleak -o xxx.rawheap
# Top 20 引用链 + 自定义泄漏定义文件
mem-analyzer jsleak -n 20 -l my_leaks.jsleaklist xxx.heapsnapshot

3.4 内存分配日志分析模块—trace

trace:内存分配日志(htrace)分析与泄漏热点识别

支持的资源类型(-c)

nativeheap — malloc/free 堆内存

dma — DMA(ION)内存

ashmem — 匿名共享内存

fd — 文件描述符

thread — 线程

四种分析范围 (-s)

app-only — 仅应用层符号

system-only — 仅系统层符号

app-and-system — 同时显示(默认)

mixed — 跨层混合符号

命令示例


# 仅分析应用层符号,并输出top20的结果
mem-analyzer trace -c nativeheap -s app-only -n 20 leak.htrace
# 仅解析htrace,将输出json格式的原始调用链
mem-analyzer trace -p data.htrace

      分析思路:以函数为核心,先找出TOP泄漏量的函数,再构建TOP函数的上下游调用链

海量原始调用栈

TOP1 泄漏量函数 caller()

3.5 ArkTS Handle日志分析模块—tshandle

tshandle:ArkTS 对象Global/LocalHandle泄漏分析

命令示例


# 生成完整 HTML 分析报告
mem-analyzer tshandle handle_data.zip
# 仅解析输出 JSON
mem-analyzer tshandle -p -f json handle_data.zip

6步分析流水线

让 HarmonyOS 应用告别内存泄漏,运行更加流畅稳定,欢迎随时交流提问,共同探索技术优化的无限可能。

mem-analyzer资源泄漏日志抓取与分析

----------------------------------------------------------------------------------------------------------

🔗 官网开发者学堂视频:https://developer.huawei.com/consumer/cn/training/result?type2List=201783644516849879&orderBy=1&courseType=5?ha_source=zxqy-IT&ha_sourceId=89000468


🔗 社区DFX专题文章: https://developer.huawei.com/consumer/cn/forum/subject/2101218731402391001?ha_source=zxqy-IT&ha_sourceId=89000468

【扫码加入 HarmonyOS DFX 技术交流群】


©本站发布的所有内容,包括但不限于文字、图片、音频、视频、图表、标志、标识、广告、商标、商号、域名、软件、程序等,除特别标明外,均来源于网络或用户投稿,版权归原作者或原出处所有。我们致力于保护原作者版权,若涉及版权问题,请及时联系我们进行处理。
分类
HarmonyOS
地址:北京市朝阳区北三环东路三元桥曙光西里甲1号第三置业A座1508室 商务内容合作QQ:2291221 电话:13391790444或(010)62178877
版权所有:电脑商情信息服务集团 北京赢邦策略咨询有限责任公司
声明:本媒体部分图片、文章来源于网络,版权归原作者所有,我司致力于保护作者版权,如有侵权,请与我司联系删除

京ICP备:2022009079号-2

京公网安备:11010502051901号

ICP证:京B2-20230255