Mức sử dụng bộ nhớ (RSS ẩn danh + bộ nhớ hoán đổi) là một chỉ số trong Android vitals, phản ánh mức sử dụng bộ nhớ của ứng dụng.
Bộ nhớ ẩn danh là bộ nhớ không được tệp lưu trữ hỗ trợ, chẳng hạn như mức phân bổ vùng nhớ khối xếp và bộ nhớ được phân bổ mmap. Kích thước cài đặt thường trú (RSS) là tổng số trang nhớ (cả trang được chia sẻ và không được chia sẻ) mà một quy trình sử dụng và được lưu giữ trong RAM vật lý. Đối với bộ nhớ ẩn danh, hệ thống có thể ghi các trang vào không gian hoán đổi (hoặc zRAM trên Android) khi bộ nhớ chịu áp lực.
Nhìn chung, mức sử dụng bộ nhớ (RSS ẩn danh + tệp hoán đổi) là chỉ số về tổng số trang bộ nhớ của ứng dụng không được tệp lưu trữ hỗ trợ, bao gồm cả mọi bộ nhớ mà hệ thống cũng đang duy trì trong tệp hoán đổi. Việc theo dõi RSS ẩn danh + bộ nhớ hoán đổi đảm bảo bạn thấy được mức sử dụng bộ nhớ thực tế và không thể loại bỏ của ứng dụng.
Xác định mức sử dụng bộ nhớ cao
Android vitals
Android vitals chia sẻ mức sử dụng bộ nhớ của ứng dụng theo các trạng thái quy trình sau đây:
- Nền trước: Quy trình của ứng dụng hiển thị. P99 cao ở đây thường ảnh hưởng đến hiệu suất mà người dùng cảm nhận được (hiện tượng giật hoặc sự cố OOM) và chịu ảnh hưởng lớn của việc giữ lại các thành phần hoặc hoạt động trên giao diện người dùng không còn cần thiết nữa.
- Dịch vụ mà người dùng nhận thấy: Quy trình của ứng dụng đang chạy ở trạng thái có thể nhận thấy. Trong đó có dịch vụ trên nền trước, các tác vụ được tăng tốc và các tác vụ chuyển dữ liệu do người dùng yêu cầu. Điều này cũng có thể mở rộng sang các dịch vụ bị ràng buộc với hệ thống hoặc các dịch vụ bị ràng buộc bởi các ứng dụng khác. Vì các dịch vụ này được thiết kế cho các tác vụ chạy trong thời gian dài, nên việc giữ lại bộ nhớ do rò rỉ hoặc không giải phóng tài nguyên có thể làm tăng đuôi P99 theo thời gian.
- Nền: Ứng dụng đang chạy một dịch vụ nền hoặc gần đây đã chuyển sang nền nhưng chưa được lưu vào bộ nhớ đệm. Đây là nơi các rò rỉ trong quá trình xử lý ở chế độ nền và các tài nguyên chưa phát hành có thể kết hợp với nhau. Vì trạng thái quy trình này ít quan trọng hơn các quy trình ở nền trước hoặc có thể nhận thấy, hãy cố gắng tránh giữ lại lượng lớn bộ nhớ ở trạng thái này.
- Đã lưu vào bộ nhớ đệm: Ứng dụng đang ở trạng thái lưu vào bộ nhớ đệm. Trạng thái này rất nhạy cảm với áp lực bộ nhớ hệ thống, chẳng hạn như LMK. Vì hệ điều hành có thể tuỳ ý loại bỏ trạng thái quy trình này, nên trạng thái này chỉ được cung cấp cho mục đích gỡ lỗi.
Để hiểu cách các trạng thái quy trình này tương quan với lệnh gọi lại onTrimMemory, hãy tham khảo hướng dẫn về giải phóng bộ nhớ để phản hồi sự kiện.
Android vitals cũng phân tích mức sử dụng bộ nhớ của ứng dụng theo các nhóm RAM. Chỉ số mức sử dụng bộ nhớ được hiển thị dưới dạng dòng thời gian của các giá trị phân vị hằng ngày, cùng với giá trị hằng ngày gần đây nhất cho phân vị thứ 50 và thứ 90.
Xác định lỗi rò rỉ bộ nhớ bằng độ lệch đuôi
Để xác định rò rỉ bộ nhớ, hãy tìm sự khác biệt giữa người dùng điển hình (P50) và người dùng cuối (P90) trong Android vitals. Mặc dù tình trạng phình to tài sản nói chung làm tăng bộ nhớ một cách đồng đều trên tất cả các phân vị, nhưng tình trạng rò rỉ bộ nhớ sẽ tăng lên theo thời gian, làm sai lệch đáng kể dữ liệu ở phần cuối.
Bạn nên so sánh các chỉ số P90 và P99 với giá trị cơ sở P50 theo tên quy trình. Nếu tỷ lệ P90/P50 vượt quá 3,5 lần, thì có thể là do rò rỉ bộ nhớ trong các phiên kéo dài. Đối với một số trường hợp sử dụng nhất định, tỷ lệ tăng không phải lúc nào cũng cho thấy tình trạng rò rỉ, nhưng bạn nên đánh giá quy trình làm việc cụ thể để xác định xem mức sử dụng bộ nhớ tăng có phải là hành vi dự kiến hay không.