「匿名 RSS + 交換」代表程序的記憶體壓力,是維持遊戲穩定性的重要指標。這項值既是 Memory Limiter (Android 17 以上版本) 的記憶體限制門檻,也是 Google Play 管理中心記憶體 Vitals 的標準基準。
無論是在執行階段或 Unreal Engine 內靜態測量,都很難取得與「匿名 RSS + 交換」完全相符的記憶體用量。
如要追蹤記憶體用量,Unreal Engine 提供 VmRSS + VmSwap 指標。雖然 VmRSS 比「匿名 RSS + 替換」更廣泛,因為 VmRSS 包含 rssFile 和 rssShmem,但仍可做為可靠的預估值。
請按照下列指引分析遊戲的記憶體用量:
使用 C++ API 查詢記憶體
使用下列 C++ API 查詢記憶體指標:
輕量型記憶體查詢
使用 GetMemoryUsedFast 進行輕量型記憶體查詢。在 Android 上,這個方法只會剖析 /proc/self/status 中的必要記憶體欄位,不會讀取整個檔案,因此會傳回預估的記憶體用量。
記憶體詳細統計資料
使用 GetStats 查詢詳細的平台記憶體統計資料。這個方法會提供完整的平台記憶體統計資料,並傳回 FPlatformMemoryStats.UsedPhysical 和 FPlatformMemoryStats.RssFile。由於 UsedPhysical 是 VmRSS 和 VmSwap 的總和,因此從 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 |
在「記憶體」列中,顯示平均和工作階段尖峰的實體與虛擬記憶體用量。 |

Mem 列的 stat unit 疊加層。使用 Unreal Insights 視覺化呈現記憶體
Unreal Insights 可讓您使用精確到影格的時間軸圖表,監控並呈現記憶體指標,例如平台記憶體統計資料和自訂計數器。
- 使用包含
default,counters的旗標將裝置連線至記憶體追蹤管道,即可在影格時間軸旁查看PlatformMemory/UsedPhysical(VmRSS + VmSwap) 圖表。 - 選用:如要更詳細地追蹤自訂記憶體指標,請使用
TRACE_DECLARE_MEMORY_COUNTER和TRACE_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());
}

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