监控和记录内存
Memory Monitor是Vega Studio中的一个工具,可通过图形界面呈现应用的内存使用情况。此工具可以帮助您识别和解决内存问题,以免导致性能问题(崩溃、冻结或抖动)。使用Memory Monitor,您可以捕获应用内存状态的快照,然后在Recording View中对其进行分析。Recording View会标注高内存消耗区域,以便您通过解决效率低下问题来实现性能优化。
本页面介绍了如何使用Memory Monitor、如何记录应用内存明细以及如何使用Visual Studio (VS) Code命令面板分析记录的数据。
在VS Code中,使用Memory Monitor检查您的应用
-
在VS Code中打开命令面板。
Mac: Shift + Command ⌘ + P
Linux: 使用Ctrl + Shift + P
注意: 一次只能打开一个项目。
在命令面板中启动Memory Monitor -
输入Vega: Start Memory Monitor,然后若是Mac则按return键,若是Linux则按回车键。
从App Performance Tools(应用性能工具)中选择Memory Monitor 您也可以从App Performance Tools部分选择Memory Monitor。
您的屏幕即会显示Memory Monitor视图。如果看到空白屏幕,请关闭窗口并重新启动Memory Monitor。
-
在连接的设备上启动您的应用,然后启动Memory Monitor。
您会看到一个进度条在新窗口中打开,然后Memory Monitor便会开始实时渲染图表。
Memory Monitor的实时渲染 该视图显示以下内存明细:
- 按比例分配共享库占用的内存 (PSS)
- 进程独自占用的物理内存 (USS)
-
JavaScript (JS) 堆(仅用于适用于Vega的React Native应用)
PSS表示总体内存使用情况,而USS则表示专用内存使用情况。如果USS随着时间的推移而增加,可能表明存在内存泄漏问题。
使用CLI检查您的应用
使用VegaStudio应用性能CLI命令kepler exec perf memory-monitor。
kepler exec perf memory-monitor
--app-name=com.amazondeveloper.keplervideoapp.main
--keplerscript-app(如果适用)
--relative-gc-count(如果适用)
有关其他命令选项,请参阅Vega Studio应用性能CLI。
内存组件
下表描述了PSS、USS和System Available Memory以及JS Heap的内存子组件。
| 内存组件 | 内存子组件 | 描述 |
|---|---|---|
PSS |
正在运行的进程所占用的内存,即其占用的专用内存加上与其他进程共享的内存份额。 | |
Swap PSS |
换入压缩RAM (ZRAM) 的页面的原始大小,即压缩前按PSS衡量的大小。 | |
DRM |
直接渲染管理器 (DRM) 分配的用于管理图形和显示操作(包括图形处理单元 (GPU) 和帧缓冲器)的内存部分。 | |
Native Heap |
PSS的原生堆部分表示使用系统分配器(如malloc)为进程分配的内存,专门用于小于内存映射访问协议(MMAP_THRESHOLD)的分配,而更大规模的分配则需要通过MMAP完成。 | |
Native Stack |
PSS的原生堆栈部分。 |
|
Anonymous |
当一个进程必须分配内存时,它会使用诸如malloc() 之类的函数来分配所需的内存量。对于超过MMAP_THRESHOLD的内存分配,该进程使用mmap() 系统调用来分配内存。MMAP分配会占用PSS内存的这一部分。 |
|
Libraries |
加载的共享库贡献的PSS。 |
|
System Available Memory |
当进程通过malloc() 或类似API提出内存分配请求时,操作系统可分配的总内存,其中还包括操作系统可以从现有进程/应用中回收的内存。 | |
USS |
应用使用的RAM的专用部分。如果USS随着时间的推移而持续增加,通常表示存在内存泄漏问题。使用其他监控指标进行精准可靠的泄漏检测。 | |
Swap USS |
换入ZRAM的内存页面的原始未压缩大小。无论页面经过压缩后占用的存储空间如何,均按USS衡量。 | |
JavaScript Heap |
Hermes JS引擎为了处理JavaScript对象和运行时数据所占用的内存。 | |
Allocated Bytes |
显示Hermes堆上为JavaScript对象和值分配的总内存,表示您JS代码的实际内存使用情况。 | |
External Bytes |
由Hermes Garbage Collector (GC) 管理的外部资源占用的内存。 | |
Number of GC Events |
Hermes GC执行的垃圾回收周期的数量。 | |
GC CPU Total Duration |
垃圾回收所占用的总CPU时间(以毫秒为单位)。 | |
GC CPU Duration % |
垃圾回收所占用的CPU时间百分比,反映内存管理开销。 | |
GC Max Pause Time |
自应用启动以来最长的GC暂停(以毫秒为单位),表示内存清理操作造成的最大延迟。 |
记录您的应用内存明细
您可以捕获要分析的特定时间段的数据。
- 在Memory Monitor中,选择⏺️ Start Recording(开始记录)。
- 出现提示时,输入记录会话的名称。
- 出现提示时输入记录超时时间。默认情况下,记录超时时间为120秒。
- 在您的Fire TV Stick上,在release(发布)模式下运行您的应用。
-
选择⏹️ Stop Recording(停止记录)以结束会话。
Recording View将在单独的窗口中打开。
分析您记录的数据
Recording View可帮助您详细分析记录的性能数据。当您打开Recording View时,系统会显示多项明细和可视化结果:
- 时间线
- PSS
- USS
- 跟踪
- JS Heap
- GC摘要
您必须密切监控GC活动,原因如下:
-
频繁的GC运行表明您的应用将过多的时间用于内存管理,而不是专注于核心任务。这种过度的内存管理会影响应用的性能,使其运行速度变慢,并且对用户交互的响应速度也会变慢。
-
在Stop-the-World (STW) 事件期间,GC会暂时冻结您的应用以释放内存。由于应用在GC运行期间会完全停止处理用户输入或停止更新界面,因而暂停会对应用的响应能力造成明显的干扰。
打开之前的记录会话
使用以下方法之一:
选项1(首选): 使用快速打开 此方法可通过VS Code的界面或CLI访问您的记录。
在VS Code中:
- 查找Memory Monitor记录文件(示例:
Basic-memory-recorder[时间戳].json),该操作使用的是VS Code快速打开,或在项目generated目录中进行。 - 单击文件一次进行预览,或单击两次以活动模式打开。
在CLI中:
-
打开终端窗口并输入:
code <<记录文件路径>>
如果您的终端无法识别Code命令:
- 打开VS Code。
-
打开命令面板:
- Mac: Cmd+Shift+P
- Linux: Ctrl+Shift+P
- 运行“Shell Command: Install code command in PATH”。
- 重试该命令。
选项2: 使用VS Code命令面板 此方法可让您使用VS Code的内置命令界面或在快速打开不可用时访问您的记录。
- 打开VS Code。
-
打开命令面板:
- Mac: Cmd+Shift+P
- Linux: Ctrl+Shift+P
- 输入Vega: Open Recording View。
-
从列表中选择之前的记录会话。
会话的Recording View在新窗口中打开。如果您在另一个选项卡中有进行中的会话,则焦点会转移到新会话。
相关主题
Last updated: 2025年10月1日

