使用 Unreal Engine 检查内存用量

匿名 RSS + 交换空间” 表示进程的内存压力,是维持游戏稳定性的关键指标。它既是 内存限制器(Android 17 及 更高版本)的内存限制阈值,也是 Google Play 管理中心内 Memory Vitals 的标准基准。

无论是运行时还是在 Unreal Engine 中静态地测量与“匿名 RSS + 交换空间”完全匹配的内存用量都很困难。

为了跟踪内存用量,Unreal Engine 提供了 VmRSS + VmSwap 指标。虽然它比“匿名 RSS + 交换空间”更广泛,因为 VmRSS 包含 rssFilerssShmem,但它仍然可以作为可靠的估计值。

请按照以下指南分析游戏的内存占用量:

使用 C++ API 查询内存

使用以下 C++ API 查询内存指标:

轻量级内存查询

使用 GetMemoryUsedFast 进行轻量级内存查询。在 Android 上,此方法仅通过解析 /proc/self/status 中的必要内存字段(而不是读取整个文件)来返回估计的占用量。

详细的内存统计信息

使用 GetStats 查询详细的平台内存统计信息。此方法提供全面的平台内存统计信息,同时返回 FPlatformMemoryStats.UsedPhysicalFPlatformMemoryStats.RssFile。由于 UsedPhysicalVmRSSVmSwap 的总和,因此您可以从中减去 RssFile,从而更接近基准值。

#include "HAL/PlatformMemory.h"

uint64 GetEstimatedPhysicalMemory()
{
  FPlatformMemoryStats Stats = FPlatformMemory::GetStats();

#if PLATFORM_ANDROID
    return Stats.UsedPhysical - Stats.RssFile;
#else
    return Stats.UsedPhysical;
#endif
}

使用控制台命令监控内存

使用此方法在游戏于设备上运行时监控内存趋势。如需打开控制台,请用四根手指点按屏幕,然后输入以下命令。

命令 说明
stat unit 在 Mem 行中显示当前汇总的物理内存用量,每帧更新一次。
stat unitmax 在 Mem 行中显示平均和会话峰值汇总物理内存和虚拟内存用量。

显示“内存”行的 Unreal Engine 统计信息单元叠加层。
图 1.stat unit 叠加层 显示 Mem 行。

使用 Unreal Insights 可视化内存

Unreal Insights 借助 Unreal Insights,您可以使用精确到帧的时间轴图表,随时间推移监控和可视化内存指标, 例如平台内存统计信息和自定义计数器。

  1. 使用包含 default,counters 的标志将设备连接到内存跟踪通道,以查看 PlatformMemory/UsedPhysical (VmRSS + VmSwap) 图表以及帧时间轴。
  2. 可选:如需更详细地跟踪自定义内存指标,请使用 TRACE_DECLARE_MEMORY_COUNTERTRACE_COUNTER_SET 声明和更新自定义跟踪计数器。
#include "ProfilingDebugging/CountersTrace.h"

TRACE_DECLARE_MEMORY_COUNTER(Trace_EstimatedPhysicalMemory, TEXT("Memory/EstimatedPhysicalMemory"));

void UpdateMemoryTraceCounter()
{
    // Note: Ensure GetEstimatedPhysicalMemory() is defined as shown
    // in the Query memory at runtime using C++ APIs section.
    TRACE_COUNTER_SET(Trace_EstimatedPhysicalMemory, GetEstimatedPhysicalMemory());
}

Unreal Insights 显示内存/估计的物理内存。
图 2.Unreal Insights 时间轴,显示 自定义 Memory/EstimatedPhysicalMemory 计数器。

使用 Perfetto 验证精确的内存用量

如需验证确切的 Android OS“匿名 RSS + 交换空间”值(而不是 估计值),请使用 Perfetto。Perfetto 会捕获系统级内存指标,以评估游戏的精确占用量。

Perfetto 界面:显示匿名 RSS、交换及其总和查询。
图 3.Perfetto 界面,显示匿名 RSS、交换空间及其总和查询。