使用 Unreal Engine 檢查記憶體用量

匿名 RSS + 交換」代表程序的記憶體壓力,是維持遊戲穩定性的重要指標。這項值既是 Memory Limiter (Android 17 以上版本) 的記憶體限制門檻,也是 Google Play 管理中心記憶體 Vitals 的標準基準。

無論是在執行階段或 Unreal Engine 內靜態測量,都很難取得與「匿名 RSS + 交換」完全相符的記憶體用量。

如要追蹤記憶體用量,Unreal Engine 提供 VmRSS + VmSwap 指標。雖然 VmRSS 比「匿名 RSS + 替換」更廣泛,因為 VmRSS 包含 rssFilerssShmem,但仍可做為可靠的預估值。

請按照下列指引分析遊戲的記憶體用量:

使用 C++ API 查詢記憶體

使用下列 C++ API 查詢記憶體指標:

輕量型記憶體查詢

使用 GetMemoryUsedFast 進行輕量型記憶體查詢。在 Android 上,這個方法只會剖析 /proc/self/status 中的必要記憶體欄位,不會讀取整個檔案,因此會傳回預估的記憶體用量。

記憶體詳細統計資料

使用 GetStats 查詢詳細的平台記憶體統計資料。這個方法會提供完整的平台記憶體統計資料,並傳回 FPlatformMemoryStats.UsedPhysicalFPlatformMemoryStats.RssFile。由於 UsedPhysicalVmRSSVmSwap 的總和,因此從 UsedPhysical 減去 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 在「記憶體」列中顯示目前的實體記憶體總用量,並在每個影格更新。
stat unitmax 在「記憶體」列中,顯示平均和工作階段尖峰的實體與虛擬記憶體用量。

Unreal Engine 統計資料單位疊加畫面,顯示「記憶體」列。
圖 1. 顯示 Mem 列的 stat unit 疊加層。

使用 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 顯示 Memory/EstimatedPhysicalMemory。
圖 2. Unreal Insights 時間軸,顯示自訂 Memory/EstimatedPhysicalMemory 計數器。

使用 Perfetto 驗證精確的記憶體用量

如要驗證確切的 Android 作業系統「匿名 RSS + 交換」值,而非預估值,請使用 Perfetto。Perfetto 會擷取系統層級的記憶體指標,評估遊戲的確切用量。

Perfetto 使用者介面:顯示匿名 RSS、交換和總和查詢。
圖 3. Perfetto 使用者介面顯示匿名 RSS、交換和總和查詢。