Đại diện cho áp lực bộ nhớ của một quy trình, "RSS ẩn danh + trao đổi" là một chỉ số quan trọng để duy trì sự ổn định của trò chơi. Đây vừa là ngưỡng giới hạn bộ nhớ cho Memory Limiter (Android 17 trở lên) vừa là điểm chuẩn tiêu chuẩn cho Memory Vitals trong Google Play Console.
Rất khó đo lường mức sử dụng bộ nhớ khớp chính xác với "RSS ẩn danh + trao đổi" tại thời gian chạy hoặc tĩnh trong Unreal Engine.
Để theo dõi mức sử dụng bộ nhớ, Unreal Engine cung cấp chỉ số VmRSS + VmSwap. Mặc dù rộng hơn "RSS ẩn danh + hoán đổi" vì VmRSS bao gồm rssFile và rssShmem, nhưng nó vẫn đóng vai trò là một số liệu ước tính đáng tin cậy.
Hãy làm theo hướng dẫn này để phân tích mức sử dụng bộ nhớ của trò chơi:
- Truy vấn bộ nhớ bằng API C++
- Giám sát bộ nhớ bằng các lệnh trên bảng điều khiển
- Trực quan hoá bộ nhớ bằng Unreal Insights
- Xác minh mức sử dụng bộ nhớ chính xác bằng Perfetto
Truy vấn bộ nhớ bằng API C++
Sử dụng các API C++ sau đây để truy vấn chỉ số về bộ nhớ:
Truy vấn bộ nhớ hạng nhẹ
Sử dụng GetMemoryUsedFast cho truy vấn bộ nhớ có dung lượng nhẹ. Trên Android, phương thức này trả về dấu vết ước tính bằng cách chỉ phân tích cú pháp các trường bộ nhớ cần thiết từ /proc/self/status, thay vì đọc toàn bộ tệp.
Số liệu thống kê chi tiết về bộ nhớ
Sử dụng GetStats để truy vấn số liệu thống kê chi tiết về bộ nhớ nền tảng. Phương thức này cung cấp số liệu thống kê toàn diện về bộ nhớ nền tảng, trả về cả FPlatformMemoryStats.UsedPhysical và FPlatformMemoryStats.RssFile. Vì UsedPhysical là tổng của VmRSS và VmSwap, nên bạn có thể tiến gần hơn đến giá trị điểm chuẩn bằng cách trừ RssFile khỏi giá trị đó.
#include "HAL/PlatformMemory.h"
uint64 GetEstimatedPhysicalMemory()
{
FPlatformMemoryStats Stats = FPlatformMemory::GetStats();
#if PLATFORM_ANDROID
return Stats.UsedPhysical - Stats.RssFile;
#else
return Stats.UsedPhysical;
#endif
}
Giám sát bộ nhớ bằng lệnh trên bảng điều khiển
Sử dụng phương pháp này để theo dõi xu hướng sử dụng bộ nhớ trong khi trò chơi đang chạy trên thiết bị. Để mở bảng điều khiển, hãy nhấn vào màn hình bằng 4 ngón tay, rồi nhập các lệnh sau.
| Lệnh | Mô tả |
|---|---|
stat unit |
Hiển thị mức sử dụng bộ nhớ thực tế tổng hợp hiện tại ở hàng Mem, được cập nhật theo từng khung hình. |
stat unitmax |
Hiển thị mức sử dụng bộ nhớ vật lý và bộ nhớ ảo trung bình và cao nhất trong phiên ở hàng Mem. |
stat unit hiển thị hàng Mem.Trực quan hoá bộ nhớ bằng Unreal Insights
Unreal Insights cho phép bạn theo dõi và trực quan hoá các chỉ số về bộ nhớ (chẳng hạn như số liệu thống kê về bộ nhớ của nền tảng và các bộ đếm tuỳ chỉnh) theo thời gian bằng cách sử dụng các biểu đồ dòng thời gian chính xác đến từng khung hình.
- Kết nối thiết bị của bạn với các Kênh theo dõi bộ nhớ bằng các cờ bao gồm
default,countersđể xem biểu đồPlatformMemory/UsedPhysical(VmRSS + VmSwap) cùng với dòng thời gian khung hình. - Không bắt buộc: Để theo dõi chỉ số bộ nhớ tuỳ chỉnh chi tiết hơn, hãy khai báo và cập nhật bộ đếm dấu vết tuỳ chỉnh bằng cách sử dụng
TRACE_DECLARE_MEMORY_COUNTERvà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 tuỳ chỉnh.Xác minh mức sử dụng bộ nhớ chính xác bằng Perfetto
Để xác minh chính xác các giá trị "RSS ẩn danh + trao đổi" của hệ điều hành Android thay vì ước tính, hãy sử dụng Perfetto. Perfetto ghi lại các chỉ số bộ nhớ ở cấp hệ thống để đánh giá chính xác mức sử dụng bộ nhớ của trò chơi.