Bạn có thể ghi lại một số loại hồ sơ hiệu suất trong Android. Việc thu thập hồ sơ giúp bạn gỡ lỗi các vấn đề liên quan đến tốc độ chạy của ứng dụng, dung lượng bộ nhớ sử dụng, mức tiêu thụ năng lượng và nhiều vấn đề khác.
Tài liệu này mô tả các loại hồ sơ hữu ích nhất và thời điểm sử dụng từng loại để gỡ lỗi các vấn đề thường gặp về hiệu suất.
Dấu vết hệ thống

Dấu vết hệ thống là một hồ sơ mạnh mẽ chứa thông tin về các quy trình, luồng, thông tin về thời gian, việc thực thi CPU và tác vụ, cũng như các sự kiện do hệ thống hoặc người dùng xác định.
Theo góc độ của ứng dụng, bản chất của thông tin trong dấu vết có thể trải rộng trên nhiều lĩnh vực, bao gồm độ trễ, hiện tượng giật, bộ nhớ, pin và nhiều lĩnh vực khác.
Dấu vết hệ thống chứa các sự kiện dựa trên mã sau đây. Các sự kiện này có thể do hệ thống hoặc người dùng xác định. Sự kiện dựa trên mã là những sự kiện mà người dùng có thể kích hoạt thông qua các lệnh gọi hàm.
- Lát cắt theo dõi: biểu thị thời gian giữa các điểm khác nhau trong mã của bạn. Bạn có thể thêm các đối tượng này bằng API
Trace.beginSection
vàTrace.endSection
. - Bộ đếm dấu vết: giá trị số đại diện cho các chỉ số, ví dụ: kích thước vùng nhớ heap. Bạn có thể thêm các lớp này bằng API
Trace.setCounter
.
Dấu vết hệ thống cũng chứa các chỉ số có thể được tạo từ các truy vấn PerfettoSQL và có thể được dùng để thực hiện các hoạt động phân tích hoặc so sánh dấu vết.
Bạn nên sử dụng dấu vết hệ thống để thực hiện các tác vụ sau:
Chẩn đoán vấn đề về độ trễ. Dấu vết hệ thống rất hữu ích trong việc tìm ra các vấn đề về độ trễ do sự chậm trễ, thời gian chờ hoặc vấn đề về lập lịch gây ra. Các trình phân tích tài nguyên khác, chẳng hạn như trình phân tích tài nguyên dựa trên mẫu, không cung cấp thông tin về thời gian mà dấu vết hệ thống cung cấp.
Tìm các phép tính trùng lặp. Hoạt động theo dõi có thể cho biết liệu một số phép tính có đang được lặp lại hay không, điều này có thể cho thấy các thao tác không cần thiết.
Chẩn đoán các vấn đề về tranh chấp khoá. Với thông tin về trạng thái luồng và các lát cắt cho biết thời điểm tài nguyên bị chặn, bạn có thể xác định xem các khoá (chẳng hạn như các khối
synchronized
) có gây ra sự chậm trễ trong hành trình của người dùng hay không.Tìm hiểu về tính năng đa luồng trong ứng dụng của bạn. Dấu vết cung cấp chế độ xem nhiều luồng, cho biết trạng thái của từng luồng và mọi lát cắt dấu vết do hệ thống hoặc ứng dụng của bạn thêm vào. Chế độ xem đa luồng này giúp bạn hiểu được những luồng nào đang hoạt động, đang ở chế độ ngủ hoặc đang chạy và cách chúng tương tác.
Thực hiện các phân tích hiệu suất phức tạp. Giao diện người dùng mạnh mẽ và khả năng hiển thị nhiều loại thông tin giúp dấu vết hệ thống hữu ích cho việc gỡ lỗi nhiều vấn đề về hiệu suất, bao gồm cả độ trễ, bộ nhớ và mức sử dụng pin.
Dấu vết hệ thống cũng hỗ trợ truy vấn bằng PerfettoSQL. Tính năng mạnh mẽ này cho phép bạn:
- Trích xuất dữ liệu cụ thể.
- Chuyển đổi dữ liệu theo dõi thành chỉ số tuỳ chỉnh.
- Tạo các bản gỡ lỗi từ các truy vấn để dễ dàng hình dung những điều bạn quan tâm nhất trong giao diện người dùng Perfetto.
- Thực hiện các phân tích phức tạp ngay trong giao diện người dùng Perfetto.
Hồ sơ mẫu ngăn xếp

Hồ sơ mẫu ngăn xếp hoạt động bằng cách ghi lại các mẫu thực thi mã và lưu trữ thông tin ngăn xếp lệnh gọi ở một tốc độ nhất định trong khi một luồng đang chạy các tác vụ trên CPU. Điều này cung cấp thông tin chi tiết về hoạt động của mã trong quá trình thực thi.
Bạn nên sử dụng các mẫu ngăn xếp để làm những việc sau:
- Tối ưu hoá điểm phát sóng. Các mẫu ngăn xếp giúp xác định những phần trong mã của bạn có nhiều hoạt động CPU, tức là luồng thường ở trạng thái "đang chạy".
- Tìm hiểu về quá trình thực thi mã. Các mẫu ngăn xếp có thể giúp bạn hiểu được hành vi tổng thể của cơ sở mã.
- Xác định mã không được chạy. Bạn có thể thấy các ngăn xếp lệnh gọi không được phép chạy, điều này cho thấy có những cơ hội tối ưu hoá ngay lập tức.
Tệp báo lỗi

Tệp báo lỗi vùng nhớ khối xếp Java cho thấy ảnh chụp nhanh bộ nhớ vùng nhớ khối xếp Java của ứng dụng. Ảnh chụp nhanh này bao gồm tất cả các đối tượng và cách chúng tham chiếu lẫn nhau tại thời điểm kết xuất được thực hiện.
Bạn nên thu thập kết xuất heap để thực hiện những việc sau:
- Phát hiện các đối tượng trùng lặp. Tệp báo lỗi cho biết số lượng đối tượng đang hoạt động, điều này rất hữu ích cho việc theo dõi các đối tượng trùng lặp. Chúng cũng cung cấp các tham chiếu đối tượng, giúp bạn xác định vị trí mã nơi các đối tượng được tạo.
- Tìm lỗi rò rỉ bộ nhớ. Tệp báo lỗi có thể cho thấy bộ nhớ không còn được sử dụng khi tệp báo lỗi được tạo, cho biết tình trạng rò rỉ bộ nhớ tiềm ẩn.
- Xác định những đối tượng có thể được tối ưu hoá. Bằng cách cho biết những đối tượng sử dụng nhiều bộ nhớ và số lượng của chúng, tệp báo lỗi giúp xác định các mẫu sử dụng bộ nhớ không hiệu quả.
Hồ sơ vùng nhớ khối xếp

Hồ sơ vùng nhớ khối xếp có cả phiên bản gốc và Java, rất phù hợp để gỡ lỗi các vấn đề về bộ nhớ. Chúng tương tự như các mẫu ngăn xếp lệnh gọi, nhưng thay vì đo chu kỳ CPU, chúng lấy mẫu khi bộ nhớ được phân bổ.
Bạn nên sử dụng hồ sơ heap để thực hiện những việc sau:
- Giảm tình trạng nhồi nhét bộ nhớ. Hồ sơ vùng nhớ khối xếp cung cấp các mẫu có vị trí mã cho hoạt động phân bổ bộ nhớ. Điều này giúp bạn xác định những khu vực tạo ra nhiều đối tượng tạm thời, có thể góp phần vào việc Thu gom rác (GC) thường xuyên trong ứng dụng của bạn.
- Phát hiện lỗi rò rỉ bộ nhớ. Bạn có thể sử dụng hồ sơ heap với các hồ sơ bộ nhớ khác để chẩn đoán và khắc phục tình trạng rò rỉ bộ nhớ. Chúng giúp bạn xác định vị trí đang phân bổ nhiều bộ nhớ hơn đáng kể so với dự kiến.
Kết hợp các trang doanh nghiệp
Thông thường, bạn sẽ phân tích hiệu suất bằng một hồ sơ duy nhất. Tuy nhiên, việc thu thập nhiều hồ sơ hoặc một hồ sơ kết hợp duy nhất thường có thể cung cấp thông tin đầy đủ hơn và giúp chẩn đoán các vấn đề phức tạp mà một hồ sơ riêng lẻ không thể thực hiện được.
Hãy cân nhắc những trường hợp mà việc kết hợp các hồ sơ sẽ mang lại lợi ích:
Tình huống 1: Điều tra mã chưa được đo lường. Dấu vết hệ thống có thể cho thấy độ trễ đối với các thao tác mà bạn đã đo lường. Tuy nhiên, bạn có thể cần thêm thông tin về các phần chưa được đo lường của mã đang chạy trong những thời điểm đó. Để điều tra, hãy lấy một hồ sơ ngăn xếp lệnh gọi để hiểu rõ mã đã thực thi. Sau đó, thông tin này có thể giúp bạn cải thiện hoạt động theo dõi bằng cách thêm nhiều lát cắt theo dõi hơn.
Trường hợp 2: Phân tích tình trạng rò rỉ bộ nhớ và thu gom rác. Hãy tưởng tượng một dấu vết hệ thống cho thấy mức sử dụng bộ nhớ vùng nhớ khối xếp Java tăng liên tục do các lượt phân bổ, kích hoạt hoạt động thu gom rác (GC) thường xuyên. Để hiểu các đối tượng được phân bổ, hãy lấy một hồ sơ heap hoặc một heap dump. Phương pháp kết hợp này giúp bạn xác định những cách giảm mức sử dụng bộ nhớ. Ví dụ: việc giảm các hoạt động phân bổ lãng phí hoặc có thể tối ưu hoá bằng cách sử dụng tính năng lưu vào bộ nhớ đệm có thể ngăn GC xảy ra.