"**anonymous RSS + swap**" ซึ่งแสดงถึงแรงกดดันด้านหน่วยความจำของกระบวนการ เป็นเมตริกที่สำคัญสำหรับการรักษาเสถียรภาพของเกม โดยทำหน้าที่เป็นทั้ง เกณฑ์ขีดจำกัดหน่วยความจำสำหรับ ตัวจำกัดหน่วยความจำ (Android 17 และ ขึ้นไป) และเกณฑ์มาตรฐานสำหรับข้อมูลสำคัญเกี่ยวกับหน่วยความจำใน Google Play Console
การวัดการใช้งานหน่วยความจำที่ตรงกับ "anonymous RSS + swap" อย่างแม่นยำนั้นทำได้ยาก ไม่ว่าจะวัดขณะรันไทม์หรือวัดแบบคงที่ภายใน Unreal Engine
Unreal Engine มี VmRSS + VmSwap เมตริก สำหรับการติดตามการใช้งานหน่วยความจำ แม้ว่าเมตริกนี้จะกว้างกว่า "anonymous RSS + swap" เนื่องจาก VmRSS มี rssFile และ rssShmem แต่ก็ยังคงเป็นค่าประมาณที่เชื่อถือได้
ทำตามคำแนะนำนี้เพื่อวิเคราะห์หน่วยความจำที่ใช้ของเกม
- ค้นหาหน่วยความจำโดยใช้ C++ API
- ตรวจสอบหน่วยความจำโดยใช้คำสั่งคอนโซล
- แสดงภาพหน่วยความจำด้วย Unreal Insights
- ยืนยันการใช้งานหน่วยความจำที่แม่นยำโดยใช้ Perfetto
ค้นหาหน่วยความจำโดยใช้ C++ API
ใช้ C++ API ต่อไปนี้เพื่อค้นหาเมตริกหน่วยความจำ
การค้นหาหน่วยความจำแบบเบา
ใช้ GetMemoryUsedFast สำหรับการค้นหาหน่วยความจำแบบเบา ใน Android เมธอดนี้จะแสดงผลการใช้หน่วยความจำโดยประมาณโดยการแยกวิเคราะห์เฉพาะช่องหน่วยความจำที่จำเป็นจาก /proc/self/status แทนที่จะอ่านทั้งไฟล์
สถิติหน่วยความจำโดยละเอียด
ใช้ GetStats เพื่อค้นหาสถิติหน่วยความจำแพลตฟอร์มโดยละเอียด เมธอดนี้จะแสดงสถิติหน่วยความจำแพลตฟอร์มที่ครอบคลุม โดยแสดงผลทั้ง FPlatformMemoryStats.UsedPhysical และ FPlatformMemoryStats.RssFile เนื่องจาก UsedPhysical เป็นผลรวมของ VmRSS และ VmSwap คุณจึงได้ค่าที่ใกล้เคียงกับค่าเกณฑ์มาตรฐานมากขึ้นโดยการลบ RssFile ออกจากค่าดังกล่าว
#include "HAL/PlatformMemory.h"
uint64 GetEstimatedPhysicalMemory()
{
FPlatformMemoryStats Stats = FPlatformMemory::GetStats();
#if PLATFORM_ANDROID
return Stats.UsedPhysical - Stats.RssFile;
#else
return Stats.UsedPhysical;
#endif
}
ตรวจสอบหน่วยความจำโดยใช้คำสั่งคอนโซล
ใช้วิธีนี้เพื่อตรวจสอบแนวโน้มหน่วยความจำขณะที่เกมกำลังทำงานบนอุปกรณ์ หากต้องการเปิดคอนโซล ให้แตะหน้าจอด้วย 4 นิ้ว แล้วป้อนคำสั่งต่อไปนี้
| คำสั่ง | คำอธิบาย |
|---|---|
stat unit |
แสดงการใช้หน่วยความจำจริงโดยรวมปัจจุบันในแถว Mem ซึ่งจะอัปเดตทุกเฟรม |
stat unitmax |
แสดงการใช้งานหน่วยความจำจริงและหน่วยความจำเสมือนโดยรวมโดยเฉลี่ยและสูงสุดต่อเซสชันในแถว Mem |
stat unit
ที่แสดงแถว Memแสดงภาพหน่วยความจำด้วย 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
หากต้องการยืนยันค่า 'anonymous RSS + swap' ที่แน่นอนของระบบปฏิบัติการ Android แทนที่จะใช้ค่า ประมาณ ให้ใช้ Perfetto Perfetto จะบันทึกเมตริกหน่วยความจำระดับระบบเพื่อประเมินการใช้หน่วยความจำที่แน่นอนของเกม