Android Profiler: nó là gì, khả năng CPU, Memory và Network

Tác giả: IT Sectr Đã đăng: 2026-03-30 Thời gian đọc: 9 phút

Android Profiler là bộ công cụ tích hợp trong Android Studio để giám sát hiệu suất ứng dụng theo thời gian thực. Nó cho phép theo dõi tải CPU, mức tiêu thụ bộ nhớ, lưu lượng mạng và mức tiêu thụ năng lượng mà không cần cài đặt thư viện bên thứ ba. Theo Android Developers, trình phân tích được tích hợp trực tiếp vào IDE và cung cấp các số liệu với độ chính xác đến mili giây cho mọi quy trình trên thiết bị được kết nối.

Điểm chính

  • Android Profiler — trình phân tích tích hợp của Android Studio cho CPU, Memory, Network và Energy.
  • CPU Profiler hiển thị tải bộ xử lý theo luồng với cây gọi phương thức chính xác.
  • Memory Profiler theo dõi Java Heap, Native Heap và Graphics Memory theo thời gian thực.
  • Network Profiler ghi lại mọi yêu cầu HTTP với kích thước, thời gian và tiêu đề.
  • Energy Profiler xác định các thao tác làm hao pin thiết bị quá mức.

Android Profiler là gì?

Android Profiler là một thành phần của Android Studio đã thay thế Android Monitor và DDMS cũ. Nó cung cấp giao diện thống nhất để phân tích tất cả các khía cạnh của ứng dụng: CPU Profiler để phân tích bộ xử lý, Memory Profiler để làm việc với bộ nhớ, Network Profiler cho các yêu cầu mạng và Energy Profiler cho mức tiêu thụ năng lượng. Dữ liệu được thu thập tự động khi khởi động ứng dụng qua Android Studio.

Trình phân tích hoạt động trên cả trình giả lập và thiết bị thực được kết nối qua USB. Theo Google I/O 2023, Android Profiler được sử dụng trong hơn 70% dự án Android và được coi là công cụ chuẩn để chẩn đoán hiệu suất. Ưu điểm chính so với các giải pháp bên thứ ba là tích hợp bằng không: không cần thêm phụ thuộc vào build.gradle hay sửa đổi mã ứng dụng.

Kiến trúc của Android Profiler dựa trên Perfetto — trình theo dõi hệ thống của Android thu thập dữ liệu ở cấp nhân và ứng dụng. Perfetto đảm bảo chi phí tối thiểu (dưới 1% CPU) và hỗ trợ ghi dài hạn lên đến 30 phút. Điều này cho phép phân tích không chỉ các thao tác nhanh mà còn các kịch bản dài — chuyển đổi màn hình, đồng bộ nền, tiêu thụ bộ nhớ trong một giờ sử dụng.

Android Profiler thu thập dữ liệu gì

Trình phân tích thu thập bốn loại dữ liệu: CPU — tải của từng lõi và luồng, Memory — Java Heap, Native Heap, Stack, Graphics, Network — tất cả yêu cầu đến và đi, Energy — các danh mục tiêu thụ năng lượng (Idle, Light, Medium, Heavy). Dữ liệu được đồng bộ hóa trên dòng thời gian — bạn có thể thấy đồng thời sự thay đổi CPU ảnh hưởng đến Memory và mức tiêu thụ năng lượng như thế nào.

CPU Profiler: phân tích bộ xử lý và luồng

CPU Profiler hiển thị tải bộ xử lý theo thời gian thực trên dòng thời gian, được phân chia theo luồng của ứng dụng. Mỗi luồng được biểu diễn bằng một đường hoặc vùng màu — vùng càng rộng, luồng càng chiếm nhiều thời gian bộ xử lý. Vùng màu đỏ có nghĩa là công việc của ứng dụng, màu xanh lam — gọi hệ thống, màu xám — chờ đợi.

Để phân tích chi tiết, CPU Profiler hỗ trợ ba chế độ ghi: Trace Java Methods (theo dõi tất cả phương thức Java), Trace C/C++ Functions (theo dõi hàm native NDK) và Sample Java Methods (lấy mẫu, chế độ khuyến nghị). Lấy mẫu có chi phí thấp nhất và phù hợp cho phân tích hàng ngày, trong khi theo dõi đầy đủ dùng để tìm các vấn đề phức tạp.

kotlin
// Ví dụ: phân tích CPU Profiler sẽ hiển thị phương thức này là nút cổ chai
class DataProcessor {
    suspend fun processLargeDataset(items: List<Item>): List<Result> {
        // CPU Profiler sẽ hiển thị tải CPU cao trong inBackgroundThread
        return withContext(Dispatchers.Default) {
            items.map { it.computeHeavyTransformation() }
        }
    }
}

// Khuyến nghị sau khi phân tích:
// computeHeavyTransformation chiếm 80% thời gian — lưu vào bộ nhớ đệm kết quả
class DataProcessorOptimized {
    private val cache = LruCache<String, Result>(100)

    suspend fun processLargeDataset(items: List<Item>): List<Result> {
        return withContext(Dispatchers.Default) {
            items.mapNotNull { cache.get(it.id) ?: it.computeHeavyTransformation().also { cache.put(it.id, it) } }
        }
    }
}

Sau khi ghi, CPU Profiler hiển thị Top-Down Tree — cây gọi với thời gian thực thi của mỗi phương thức. Chú ý đến cột Self Time/Total: nếu Self Time của phương thức lớn hơn 16 ms và nó được gọi từ luồng UI — đó là hiện tượng rớt khung hình chắc chắn. Giải pháp là chuyển các tính toán nặng sang luồng nền qua Dispatchers.IO hoặc Default.

Chế độ theo dõi CPU

Sample Java Methods — chế độ khuyến nghị cho phân tích hàng ngày với chi phí 3–5%. Trace Java Methods — theo dõi đầy đủ mọi cuộc gọi, chi phí lên đến 15%, dùng cho ghi ngắn (5–10 giây). Trace C/C++ Functions — theo dõi mã NDK qua Linux Perf, không thể thiếu cho phân tích game và thư viện C++. Chuyển đổi chế độ tùy theo loại vấn đề.

Memory Profiler: làm việc với bộ nhớ và tìm rò rỉ

Memory Profiler theo dõi tất cả danh mục bộ nhớ của ứng dụng: Java Heap (đối tượng JVM), Native Heap (cấp phát C/C++ qua JNI), Stack (ngăn xếp luồng) và Graphics (kết cấu, bộ đệm GPU). Trực quan hóa chính là biểu đồ thời gian tiêu thụ bộ nhớ, nơi mỗi danh mục được hiển thị bằng màu riêng. Nếu biểu đồ không giảm sau khi thu gom rác — hãy nghi ngờ rò rỉ.

Để tìm rò rỉ, hãy sử dụng chức năng Capture Heap Dump. Tại thời điểm dump, Android Profiler tạm dừng ứng dụng trong ~100 ms và tạo tệp HPROF — ảnh chụp đầy đủ tất cả đối tượng sống trong Java Heap. Sau khi mở dump, bạn có thể sắp xếp đối tượng theo Retained Size (lượng bộ nhớ sẽ được giải phóng khi xóa đối tượng) và tìm các thể hiện Activity, Fragment hoặc Bitmap đáng lẽ đã bị hủy.

Theo Google I/O 2022, Memory Profiler kết hợp với LeakCanary bao phủ 95% kịch bản phát hiện rò rỉ bộ nhớ trên Android. LeakCanary hoạt động tự động — phát hiện rò rỉ trong nền. Memory Profiler cần thiết cho phân tích thủ công: bạn thấy toàn cảnh cấp phát, không chỉ rò rỉ.

Danh mục bộ nhớMô tảKích thước điển hình
Java HeapHeap JVM: đối tượng Kotlin/Java5–200 MB
Native HeapCấp phát qua JNI, NDK1–100 MB
GraphicsKết cấu, bộ đệm GPU10–200 MB
StackNgăn xếp tất cả luồng1–10 MB

Cách diễn giải dump HPROF

Sau khi chụp dump, hãy sắp xếp đối tượng theo Retained Size — đây là lượng bộ nhớ sẽ được giải phóng khi xóa đối tượng. Tìm các thể hiện Activity, Fragment và Bitmap có Retained Size lớn không nên có trong bộ nhớ. Chuyển đến tab Reference Tree để xem chuỗi tham chiếu giữ đối tượng — thường là trường tĩnh của singleton hoặc callback chưa được dọn dẹp. Một chỉ số quan trọng là tốc độ cấp phát (số lượng cấp phát mỗi giây). Nếu tốc độ cấp phát vượt quá 10.000 đối tượng/giây, ứng dụng dành quá nhiều thời gian tạo và xóa đối tượng tạm thời, gây quá tải GC và dẫn đến micro-freeze. Trong trường hợp này, hãy sử dụng công cụ View Inspector và tìm các vị trí tạo đối tượng thường xuyên trong vòng lặp.

Network Profiler: giám sát yêu cầu mạng

Network Profiler hiển thị tất cả yêu cầu mạng của ứng dụng theo thời gian thực trên dòng thời gian. Mỗi yêu cầu được hiển thị dưới dạng thanh ngang — chiều dài tương ứng với thời gian thực thi, màu sắc — loại yêu cầu (GET, POST, PUT, DELETE). Cuộn thang đo cho phép xem các yêu cầu được phân bố theo thời gian như thế nào và liệu chúng có bị trùng lặp không.

Tất cả thư viện phổ biến đều được hỗ trợ: OkHttp, Retrofit, Volley, Ktor. Đối với Ktor và OkHttp, trình phân tích hiển thị ngăn xếp cuộc gọi đầy đủ, bao gồm cả interceptor và bộ chuyển đổi. Đối với mỗi yêu cầu, có sẵn Tiêu đề yêu cầuTiêu đề phản hồi, nội dung phản hồi (tối đa 1 MB), mã trạng thái và thời gian.

Các vấn đề điển hình được Network Profiler xác định: thiếu bộ nhớ đệm (cùng một URL được yêu cầu mỗi khi mở), yêu cầu trùng lặp (hai thành phần cùng tải dữ liệu giống nhau đồng thời), kích thước phản hồi quá mức (máy chủ gửi 5 MB trong khi cần 50 KB). Network Profiler giúp thấy những vấn đề này chỉ với một cái nhìn vào dòng thời gian.

Để mô phỏng mạng chậm, hãy sử dụng Network Conditioning trong Android Studio — nó cho phép giới hạn băng thông xuống 3G/2G và thêm độ trễ. Điều này cực kỳ quan trọng để kiểm tra hành vi ứng dụng trong điều kiện mạng kém, đặc biệt cho các ứng dụng hoạt động ở khu vực có internet không ổn định.

Energy Profiler: phân tích mức tiêu thụ năng lượng

Energy Profiler đánh giá tác động của ứng dụng lên pin dựa trên dữ liệu Perfetto. Công cụ không đo mức tiêu thụ thực tế bằng miliampe, mà phân loại mỗi thao tác vào một trong năm danh mục tiêu thụ năng lượng: Idle, Light, Medium, High và Overloaded. Dòng thời gian của Energy Profiler được tô màu: xanh lục (tải nhẹ), vàng (trung bình), đỏ (cao).

Nguyên nhân chính của vùng đỏ: WakeLock (ứng dụng giữ bộ xử lý hoạt động), Định vị GPS (yêu cầu tọa độ liên tục với độ chính xác cao), Kết nối Keep-Alive (trao đổi dữ liệu thường xuyên với máy chủ), truyền dữ liệu lớn (gửi tệp, phát trực tuyến). Energy Profiler cho thấy chính xác thao tác nào tại thời điểm nào gây ra đỉnh tiêu thụ năng lượng.

Theo Android Developers, ứng dụng điển hình không nên dành quá 5% thời gian ở danh mục High. Nếu Energy Profiler hiển thị vùng đỏ hơn 10% thời gian phân tích — ứng dụng sẽ không vượt qua đánh giá theo tiêu chí hao pin. Khuyến nghị — sử dụng WorkManager cho tác vụ nền, giới hạn yêu cầu Định vị ở độ chính xác tối thiểu cần thiết và gộp các yêu cầu mạng thành lô.

Cách sử dụng Android Profiler: hướng dẫn thực hành

Khởi động Android Profiler chỉ với một cú nhấp chuột: trong Android Studio, mở View → Tool Windows → Profiler hoặc nhấp đúp vào biểu tượng Profiler ở bảng bên phải. Sau khi khởi động ứng dụng trên thiết bị được kết nối, Android Studio sẽ tự động kết nối đến tiến trình và bắt đầu thu thập dữ liệu. Trên dòng thời gian, các biểu đồ CPU, Memory, Network và Energy sẽ xuất hiện ngay lập tức.

Để phân tích chi tiết, hãy chọn tab mong muốn (CPU, Memory, Network hoặc Energy) và bắt đầu ghi. Đối với CPU, tôi khuyên dùng chế độ Sample Java Methods với thời gian ghi 30 giây — đủ cho một kịch bản điển hình. Đối với Memory — dump heap sau khi thực hiện kịch bản (Capture Heap Dump). Đối với Network, việc ghi tự động bắt đầu, chỉ cần nhấn nút Stop sau khi hoàn thành kịch bản.

Sau khi dừng ghi, hãy xuất dữ liệu: File → Save As lưu toàn bộ phiên vào tệp .perf. Điều này thuận tiện để so sánh số liệu trước và sau khi tối ưu hóa. Hãy tạo phiên cơ sở trên phiên bản ổn định đầu tiên và so sánh mỗi phiên mới với nó — đây là cách duy nhất để đánh giá khách quan các thay đổi về hiệu suất.

Tự động hóa phân tích trong CI

Android Profiler có thể được chạy từ dòng lệnh qua Android Studio CLIFirebase Test Lab. Firebase Test Lab hỗ trợ phân tích hiệu suất như một phần của kiểm thử giao diện người dùng: bạn nhận được số liệu CPU, Memory và Network cùng với kết quả kiểm thử. Hãy thiết lập pipeline sao cho khi số liệu giảm 10% so với đường cơ sở, pipeline CI sẽ bị chặn cho đến khi nhà phát triển kiểm tra.

Câu hỏi thường gặp

Android Profiler có làm chậm ứng dụng không?

Tác động là tối thiểu. Android Profiler sử dụng Perfetto để thu thập dữ liệu, chỉ thêm dưới 1% chi phí CPU. Ở chế độ Sample Java Methods, chi phí khoảng 3–5%, không đáng kể cho phân tích kịch bản. Theo dõi phương thức đầy đủ có thể gây chi phí lên đến 15%, do đó chỉ được sử dụng cho các bản ghi ngắn.

Có thể phân tích ứng dụng mà không cần Android Studio không?

Có, trace hệ thống có thể được ghi qua Perfetto CLI trực tiếp từ thiết bị: adb shell perfetto --out /data/local/tmp/trace.perf. Sau đó mở tệp trong giao diện Perfetto UI (ui.perfetto.dev) hoặc nhập vào Android Studio để xem với đầy đủ đánh dấu ứng dụng.

Network Profiler khác Charles Proxy như thế nào?

Android Profiler là công cụ hệ thống không yêu cầu cấu hình proxy. Nó hiển thị yêu cầu trực tiếp trong IDE trong bối cảnh hiệu suất. Charles Proxy là máy chủ proxy bên ngoài cung cấp phân tích chi tiết hơn (chặn lưu lượng, sửa đổi yêu cầu, gửi lại). Để phân tích hiệu suất, hãy sử dụng Android Profiler; để phân tích hợp đồng API, hãy sử dụng Charles.

Làm thế nào để tìm rò rỉ bộ nhớ qua Memory Profiler?

Thực hiện dump heap trước khi chạy kịch bản (ví dụ: trước khi mở Activity). Thực hiện kịch bản — mở Activity và đóng nó. Thực hiện dump thứ hai. So sánh số lượng thể hiện Activity đang sống: nếu dump thứ hai có nhiều hơn — rò rỉ. Sắp xếp theo Retained Size, tìm Activity dư thừa và xem Reference Tree để xác định nguyên nhân.

Tại sao Energy Profiler không khả dụng trên một số thiết bị?

Energy Profiler yêu cầu hỗ trợ Hồ sơ Năng lượng ở cấp thiết bị và Android 8.0+. Trên trình giả lập và một số firmware (đặc biệt là Trung Quốc), dữ liệu có thể không có. Giải pháp — phân tích mức tiêu thụ năng lượng trên thiết bị tham chiếu Pixel hoặc Samsung với firmware Android thuần.

Tổng kết

  • Android Profiler — trình phân tích tích hợp của Android Studio để giám sát CPU, Memory, Network và Energy.
  • CPU Profiler phân tích tải lõi và luồng sử dụng theo dõi Perfetto với chi phí dưới 1%.
  • Memory Profiler theo dõi Java Heap, Native Heap, Graphics và Stack với hỗ trợ dump HPROF.
  • Network Profiler ghi lại tất cả yêu cầu OkHttp, Retrofit và Ktor với tiêu đề, nội dung và thời gian.
  • Energy Profiler phân loại mức tiêu thụ năng lượng của ứng dụng từ Idle đến Overloaded.
  • Trình phân tích hoạt động mà không cần sửa đổi mã ứng dụng — tích hợp bằng không.
  • Tích hợp phân tích vào CI qua Firebase Test Lab và lưu đường cơ sở cho mỗi bản phát hành.

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm