as

Settings
Sign out
Notifications
Alexa
亚马逊应用商店
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阈值限制
    JavaScript堆内存即将达到200MB的临界限制
  4. 记录会话以捕捉崩溃场景。

步骤3: 捕获JavaScript堆快照

  1. 将Chrome DevTools附加到适用于Vega的React Native应用。按照启动Chrome DevTools中的步骤操作。

    将Chrome DevTools连接到React Native Vega应用进行调试的动画演示
    将Chrome DevTools连接到Vega应用进行内存分析
  2. 导航到Memory(内存)选项卡并选择Heap Snapshot(堆快照)。

    Chrome DevTools Memory选项卡界面,已选择Heap Snapshot选项,突出显示Take snapshot按钮
    用于捕获堆快照的Chrome DevTools Memory选项卡
  3. 单击Take snapshot(拍摄快照)。

    下图是堆快照的示例。

    Chrome DevTools显示捕获的堆快照,有一个下载箭头按钮,用于将快照保存到本地计算机硬盘
    捕获的堆快照,有下载选项可用
  4. 要将快照下载到您的主机上,请单击向下箭头。

步骤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分析结果表,显示基准、目标及最终快照之间的内存泄漏对比,包含对象计数与大小
    Memlab分析表,比较堆快照,查看是否存在内存泄漏
  3. 查找表格中未清除的对象。

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

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

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

    Memlab保留器跟踪显示了详细的对象树层次结构和内存泄漏路径,并显示保留大小
    Memlab保留器跟踪显示了内存泄漏对象路径

详细了解Memblab:

使用Chrome DevTools进行分析

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

  2. 上传您的JavaScript堆快照。

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

    Chrome DevTools堆快照分析界面显示Summary视图,对象按Shallow Size和Retained Size列排序
    带有多个视图选项的Chrome DevTools堆快照分析
  • Shallow Size(浅层大小)排序以查找最大的对象
  • Retained Size(保留大小)排序以识别影响最大的对象

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

了解快照分析:


Last updated: 2025年9月30日