Bộ nhớ là một tài nguyên quan trọng và có hạn trên các thiết bị chạy Android. Là nhà phát triển nền tảng Android hoặc OEM, việc hiểu cách bộ nhớ hoạt động ở mọi cấp độ (từ thời gian chạy Java cho đến nhân Linux) là điều cần thiết để xây dựng một hệ thống ổn định và hiệu quả.
Hướng dẫn này cung cấp thông tin tổng quan toàn diện về cấu trúc bộ nhớ Android, các công cụ có sẵn để phân tích và các bài tập thực hành giúp bạn xác định và giải quyết các vấn đề liên quan đến bộ nhớ.
Mục tiêu
Sau khi hoàn tất hướng dẫn này, bạn sẽ có thể:
- Giải thích các khái niệm cơ bản về bộ nhớ Android, bao gồm cả mô hình quy trình Zygote và các tệp được ánh xạ bộ nhớ.
- Phân biệt Kích thước cài đặt thường trú (RSS), Kích thước cài đặt theo tỷ lệ (PSS) và Kích thước cài đặt riêng biệt (USS).
- Sử dụng các công cụ dòng lệnh tiêu chuẩn như
dumpsys meminfovàshowmapđể nhanh chóng đánh giá mức sử dụng bộ nhớ. - Ghi lại và phân tích kết xuất vùng nhớ khối xếp Java bằng AHAT để tìm các rò rỉ và việc phân bổ quá mức.
- Sử dụng Perfetto và
heapprofdđể lập hồ sơ cả bộ nhớ Java và bộ nhớ gốc trên toàn bộ hệ thống. - Tìm hiểu các chỉ báo áp lực bộ nhớ trên toàn hệ thống, chẳng hạn như Thông tin về tình trạng tắc nghẽn do áp lực (PSI) và theo dõi hoạt động của Mô đun tắt ứng dụng khi bộ nhớ thấp (LMK).
- Theo dõi hoạt động thu hồi ở cấp độ hạt nhân, bao gồm cả việc loại bỏ bộ nhớ ảo ZRAM và bộ nhớ đệm trang.
Cấu trúc hướng dẫn
Hướng dẫn này được chia thành các phần sau, được thiết kế để đọc tuần tự:
- Các khái niệm cơ bản: Các nguyên tắc kỹ thuật cốt lõi về bộ nhớ Android.
- Công cụ đánh giá nhanh: Sử dụng
meminfo,showmapvàprocstatsđể phân loại nhanh. - Phân tích bộ nhớ Java: Phân tích sâu vùng nhớ khối xếp Java bằng AHAT.
- Bitmap và bộ nhớ: Tìm hiểu cách hình ảnh ảnh hưởng đến RAM và sử dụng các công cụ để lập hồ sơ cho hình ảnh.
- Phân tích bộ nhớ gốc: Phân tích bộ nhớ C/C++ bằng Perfetto và
heapprofd. - WebView và bộ nhớ: Tìm hiểu về cấu trúc đa tiến trình và mức sử dụng bộ nhớ của WebView.
- Mã ứng dụng là bộ nhớ: Tìm hiểu cách hoạt động tải lớp và tình trạng dex bloat ảnh hưởng đến RAM.
- Luồng và bộ nhớ: Phân tích chi phí của các ngăn xếp luồng gốc.
- Tính cục bộ và hiệu suất của bộ nhớ: Tìm hiểu cách các mẫu truy cập dữ liệu ảnh hưởng đến hiệu suất của CPU.
- Liên kết dịch vụ và trạng thái quy trình: Hiểu cách các phần phụ thuộc trên nhiều quy trình ảnh hưởng đến điểm OOM.
- Khắc phục sự cố trên toàn hệ thống: Giám sát PSI, LMK, ZRAM swap và việc loại bỏ bộ nhớ đệm trang.
- Thu hồi bộ nhớ: loại bỏ và hoán đổi: Tìm hiểu về memcg, phí và thu hồi chủ động bằng
memory.reclaim. - Tương tác giữa kswapd và lmkd: Tìm hiểu cách kswapd và lmkd hoạt động cùng nhau khi chịu áp lực.
Điều kiện tiên quyết và môi trường
Hướng dẫn này trình bày các quy trình tham chiếu, dữ liệu đo điểm chuẩn và nghiên cứu điển hình minh hoạ cách chẩn đoán và giải quyết các vấn đề về bộ nhớ trên Android.
- Công cụ phân tích: Các kỹ thuật trong hướng dẫn này chủ yếu sử dụng các công cụ tiêu chuẩn về hiệu suất Android, bao gồm Perfetto,
dumpsys meminfo,showmapvà AHAT. - Đặc quyền root: Một số quy trình chẩn đoán ở cấp hệ thống (chẳng hạn như kiểm tra áp lực bộ nhớ của nhân hoặc bộ đếm PMU phần cứng) yêu cầu đặc quyền root nâng cao (
adb root) trên bản dựng thiết bị hoặc trình mô phỏng userdebug.
Bắt đầu tại đây: Các khái niệm cơ bản