Kiểm tra mức sử dụng bộ nhớ bằng Unreal Engine

Đạ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 rssFilerssShmem, 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++

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.UsedPhysicalFPlatformMemoryStats.RssFile. Vì UsedPhysical là tổng của VmRSSVmSwap, 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.

Lớp phủ đơn vị số liệu thống kê của Unreal Engine cho thấy hàng Mem.
Hình 1. Lớp phủ 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.

  1. 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.
  2. 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_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 cho thấy Memory/EstimatedPhysicalMemory.
Hình 2. Dòng thời gian của Unreal Insights cho thấy bộ đếm 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.

Giao diện người dùng Perfetto cho thấy RSS ẩn danh, không gian hoán đổi và truy vấn tổng của chúng.
Hình 3. Giao diện người dùng Perfetto cho thấy RSS ẩn danh, không gian hoán đổi và tổng truy vấn của chúng.