调查JavaScrip内存
JavaScript内存异常会导致应用崩溃和用户体验不佳。超过JavaScript堆限制(TV配置文件为200MB)会触发Hermes垃圾回收器 (HermesGC) 内存不足错误。常见的触发因素包括内存泄漏、数据结构过大和资源清理效率低下。
本页面介绍了识别、分析和解决内存问题的步骤。
步骤1: 确定崩溃原因
- 在设备上下载并打开汇总崩溃报告 (ACR) 文件。
- 在ACR文件中查找
CrashReason:SIGSEGV。 - 要确认JavaScript堆内存溢出情况,请查看
HermesGC OOM的应用日志。
示例ACR:
CrashDescriptor:1b26a2ab4b104aa474b84218e69d2780
CrashLang:Native
Process:com.org.keplerApp
LibraryName:keplerscript-runtime-loader-2.so
CrashReason:SIGSEGV
示例日志:
Nov 21 20:10:13.389612 firestick-010bc8cead0041f0 local0.info keplerscript-ru[7087]: 27 I KeplerScript:[Logging.cpp:40] HermesGC OOM: [] reason = Max heap size was exceeded (1 from category: vm_allocate_category), numCollections = 177, heapSize = 205520896, allocated = 201732128, va = 205520896, external = 88.
包含HermesGC OOM日志错误的SIGSEGV表示,JavaScript在运行时出现堆内存问题。
步骤2: 识别内存泄漏场景
- 打开Visual Studio (VS) Code。
- 启动Memory Monitor。
- 按照检查您的应用内存消耗中的步骤进行操作。
-
按照200MB阈值方法跟踪JavaScript堆图。
JavaScript堆内存即将达到200MB的临界限制 - 记录会话以捕捉崩溃场景。
- 按照记录您的应用内存明细中的步骤操作。
步骤3: 捕获JavaScript堆快照
-
将Chrome DevTools附加到适用于Vega的React Native应用。按照启动Chrome DevTools中的步骤操作。
将Chrome DevTools连接到Vega应用进行内存分析 -
导航到Memory(内存)选项卡并选择Heap Snapshot(堆快照)。
用于捕获堆快照的Chrome DevTools Memory选项卡 -
单击Take snapshot(拍摄快照)。
下图是堆快照的示例。
捕获的堆快照,有下载选项可用 -
要将快照下载到您的主机上,请单击向下箭头。
步骤4: 分析JavaScript堆快照
使用Memlab或Chrome DevTools分析JavaScript堆快照。
使用Memlab进行分析
-
安装Memlab:
npm install -g memlab -
运行分析:
memlab find-leaks --baseline <初始快照> --target <泄漏后快照> --final <清除后快照> --trace-all-objectsMemlab会比较三张堆快照:
- 基准 - 初始状态
- 目标 - 可能泄漏后的状态
- 最终 - 清理后的状态
--trace-all-objects参数会将所有目标页面对象标记为可能存在泄漏问题。memlab find-leaks会比较三张堆快照,并以表格格式提供摘要:
Memlab分析表,比较堆快照,查看是否存在内存泄漏 -
查找表格中未清除的对象。
-
检查用于解除分配持久对象的代码。
-
查看retainer traces(仅提供英文版)。
Memlab根据保留的大小对泄露的对象进行排名。使用保留器跟踪找到对象树中泄露的对象。
Memlab保留器跟踪显示了内存泄漏对象路径
详细了解Memblab:
使用Chrome DevTools进行分析
-
打开Chrome DevTools并转到Memory选项卡。
-
上传您的JavaScript堆快照。
-
使用不同的视图分析JavaScript堆快照:
带有多个视图选项的Chrome DevTools堆快照分析
- 按Shallow Size(浅层大小)排序以查找最大的对象
- 按Retained Size(保留大小)排序以识别影响最大的对象
为各种分析视角选择不同的视图(摘要、比较、包含、统计)。
了解快照分析:
相关主题
Last updated: 2025年9月30日

