Mức sử dụng bộ nhớ (RSS ẩn danh + bộ nhớ hoán đổi) là một chỉ số 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. Thao tác này ghi lại các mức phân bổ bộ nhớ động của ứng dụng, bao gồm cả vùng nhớ khối xếp Java hoặc Kotlin, các mức phân bổ vùng nhớ khối xếp gốc không được quản lý (nơi dữ liệu pixel Bitmap nằm trên Android 8.0 (cấp độ API 26) trở lên) và các ngăn xếp thực thi luồng. Mặc dù hệ điều hành có thể giảm bộ nhớ được sao lưu bằng tệp khi chịu áp lực, nhưng hệ điều hành không thể giảm bộ nhớ ẩn danh.
Kích thước cài đặt thường trú (RSS) là tổng số trang bộ nhớ (cả đượ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ý. Một trang được coi là "được chia sẻ" nếu có nhiều quy trình truy cập vào trang đó (chẳng hạn như các ứng dụng truy cập vào cùng một thư viện).
Đố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. Hệ thống có thể đọc lại các trang này từ bộ nhớ trao đổi nếu cần.
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.
Nếu mức sử dụng bộ nhớ của ứng dụng cao, hãy điều tra thêm và khắc phục vấn đề theo hướng dẫn trên trang này.
Tài nguyên
Chẩn đoán mức sử dụng bộ nhớ quá mức trên thiết bị
Để bắt đầu chẩn đoán nguồn gốc của tình trạng mức sử dụng bộ nhớ quá mức, bạn có thể ghi lại tệp báo lỗi bằng cách sử dụng Ghi lại tệp báo lỗi trong phần cài đặt cho nhà phát triển, Android Studio hoặc Perfetto. Bạn nên bắt đầu bằng cách ghi lại một tệp báo lỗi cục bộ sau khi kiểm thử các hành trình chính của người dùng trong ứng dụng.
Bạn nên kiểm thử những hành trình sau đây của người dùng:
- Chế độ xem web và phiên trình duyệt trong ứng dụng
- Cuộn vô hạn với nhiều nội dung nghe nhìn
- Quy trình tạo và chỉnh sửa thành phần
Để điều tra các trường hợp rò rỉ bộ nhớ tiềm ẩn, hãy chạy hành trình tương ứng của người dùng cục bộ và thu thập các kết xuất heap trên nhiều trạng thái quy trình (hiển thị, dịch vụ nền trước và được lưu vào bộ nhớ đệm) để xác minh xem ứng dụng có giải phóng bộ nhớ sau khi chuyển sang nền hay không. Để 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.
Nếu đang gỡ lỗi các vấn đề về bộ nhớ bằng Android Studio Profiler, bạn cũng có thể sử dụng chế độ tích hợp LeakCanary để đơn giản hoá quy trình phát hiện rò rỉ và bitmap trùng lặp nhằm tối ưu hoá việc sử dụng hình ảnh.
Sau khi thu thập tệp báo lỗi, bạn nên sử dụng kỹ năng trình phân tích tài nguyên Android để phân tích tệp báo lỗi và xác định các nguồn có thể dẫn đến mức sử dụng bộ nhớ cao.
Kỹ năng Android
Xem trên GitHubTrình phân tích tài nguyên Android
android skills add android-profilerSau đây là ví dụ về nội dung mà các kỹ năng AI có thể phản hồi:
I have completed the analysis of memory leaks and bitmap issues for [app] using the provided Perfetto trace.
Summary of Findings
The investigation identified a critical memory pressure issue caused by massive bitmap retention within the app process.
...
Recommendations for [app]
1. [Library] Image Cache Optimization:
* Review the [Library] caching strategy. Ensure that bitmaps
loaded for animations are released or downsampled when the animation is
not in the foreground.
2. Asset Resolution Audit:
* The 14.7 MB average size suggests full-screen or extremely high-density assets. Audit the [library] files in the native_home component to ensure they are not using unnecessarily large source images.
3. View Lifecycle Management:
* Investigate why 21 [LibraryImage] instances are alive simultaneously. Ensure that views in the bottom
tab are properly detached or their animations are cleared when switching between tabs.
4. Fix Surface Leaks:
* Address the Surface.release failures observed in the logs, as these can lead to both memory leaks and
native resource exhaustion.
Tài nguyên bổ sung để diễn giải kết xuất heap
Các tài nguyên sau đây cung cấp thêm thông tin về cách diễn giải kết xuất heap và gỡ lỗi mức sử dụng bộ nhớ:
- Phân tích thủ công: Sử dụng hướng dẫn về Perfetto Heap Dump Explorer để tìm hiểu cách thao tác và diễn giải các hình ảnh trực quan về tệp báo lỗi khối xếp trong giao diện người dùng Perfetto.
- Phân bổ Java/Kotlin: Đọc bài viết Hình dung về kết xuất heap ART đầu tiên để xem hướng dẫn từng bước về cách phân tích kết xuất heap Android Runtime (ART).
- Phân bổ gốc: Tham khảo tài liệu Phân tích tài nguyên gốc của Perfetto để tìm hiểu cách thu thập và phân tích hồ sơ bộ nhớ gốc (C/C++).
- Kiểm tra bằng giao diện dòng lệnh (CLI): Sử dụng adb dumpsys meminfo để xem thông tin tổng quan nhanh về mức sử dụng bộ nhớ của ứng dụng trên một thiết bị.
Cải thiện mức sử dụng bộ nhớ
Hãy tham khảo các phần này để tìm hiểu thêm về cách cải thiện mức sử dụng bộ nhớ của ứng dụng:
- Giảm kích thước mã và tài nguyên của ứng dụng
- Giám sát mức sử dụng bộ nhớ và bộ nhớ hiện có
- Tạo cấu trúc mã tiết kiệm bộ nhớ hơn
Để biết hướng dẫn chi tiết về cách khắc phục các vấn đề về bộ nhớ, hãy tham khảo hướng dẫn Quản lý bộ nhớ của ứng dụng.