as

Settings
Sign out
Notifications
Alexa
亚马逊应用商店
Ring
AWS
文档
Support
Contact Us
My Cases
新手入门
设计和开发
应用发布
参考
支持

调查JavaScrip内存

调查JavaScrip内存

JavaScript内存异常会导致应用崩溃和用户体验不佳。超过JavaScript堆限制(TV配置文件为200MB)会触发Hermes垃圾回收器 (HermesGC) 内存不足错误。常见的触发因素包括内存泄漏、数据结构过大和资源清理效率低下。

本页面介绍了识别、分析和解决内存问题的步骤。

步骤1: 确定崩溃原因

  1. 在设备上下载并打开汇总崩溃报告 (ACR) 文件。
  2. 在ACR文件中查找CrashReason:SIGSEGV
  3. 要确认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: 识别内存泄漏场景

  1. 打开Visual Studio (VS) Code。
  2. 启动Memory Monitor
  3. 按照200MB阈值方法跟踪JavaScript堆图。
屏幕截图,示出了JavaScript堆内存即将达到200MB的临界限制。
  1. 记录会话以捕捉崩溃场景。

步骤3: 捕获JavaScript堆快照

  1. 将Chrome DevTools附加到适用于Vega的React Native应用。按照启动Chrome DevTools中的步骤操作。
屏幕截图,示出了Chrome DevTools连接到Vega应用进行内存分析的情况。
  1. 导航到Memory(内存)选项卡并选择Heap Snapshot(堆快照)。
屏幕截图,示出了用于捕获堆快照的Chrome DevTools的Memory选项卡。
  1. 单击Take snapshot(拍摄快照)。

下图是堆快照的示例。

屏幕截图,示出了捕获的堆快照,其中有下载选项可用。
  1. 要将快照下载到您的主机上,请单击向下箭头。

步骤4: 分析JavaScript堆快照

使用Memlab或Chrome DevTools分析JavaScript堆快照。

使用Memlab进行分析

  1. 安装Memlab:

    已复制到剪贴板。

     npm install -g memlab
    
  2. 运行分析:

    已复制到剪贴板。

    memlab find-leaks --baseline <初始快照> --target <泄漏后快照> --final <清除后快照> --trace-all-objects
    

    Memlab会比较三张堆快照:

    • 基准 - 初始状态
    • 目标 - 可能泄漏后的状态
    • 最终 - 清理后的状态

    --trace-all-objects参数会将所有目标页面对象标记为可能存在泄漏问题。

    memlab find-leaks会比较三张堆快照,并以表格格式提供摘要:

屏幕截图,示出了Memlab分析表,在其中比较堆快照,确定是否存在内存泄漏。
  1. 查找表格中未清除的对象。

  2. 检查用于解除分配持久对象的代码。

  3. 查看retainer traces(仅提供英文版)。

    Memlab根据保留的大小对泄露的对象进行排名。使用保留器跟踪找到对象树中泄露的对象。

屏幕截图,示出了Memlab保留器轨迹,这些轨迹显示了内存泄漏对象路径。

详细了解Memblab:

使用Chrome DevTools进行分析

  1. 打开Chrome DevTools并转到Memory选项卡。

  2. 上传您的JavaScript堆快照。

  3. 使用不同的视图分析JavaScript堆快照:

屏幕截图,示出了带有多个视图选项的Chrome DevTools堆快照分析。
  • Shallow Size(浅层大小)排序以查找最大的对象
  • Retained Size(保留大小)排序以识别影响最大的对象

为各种分析视角选择不同的视图(摘要、比较、包含、统计)。

了解快照分析:


Last updated: 2025年9月30日