付款資料類型和適用時機

您可以在 Android 中記錄多種效能設定檔。收集設定檔有助於偵錯,瞭解應用程式的執行速度、記憶體用量、耗電量等問題。

本文說明最實用的設定檔類型,以及在偵錯常見效能問題時,應使用哪種設定檔。

系統追蹤記錄

系統追蹤範例
圖 1.:系統追蹤範例。

系統追蹤記錄是功能強大的設定檔,內含程序、執行緒、時間資訊、CPU 和工作執行作業,以及系統或使用者定義事件的相關資訊。

從應用程式的角度來看,追蹤記錄中的資訊可能涵蓋延遲、抖動、記憶體、電池等各種領域。

系統追蹤記錄包含下列程式碼驅動的事件,這些事件可以是系統或使用者定義。程式碼驅動事件是指使用者可透過函式呼叫觸發的事件。

系統追蹤記錄也包含可從 PerfettoSQL 查詢建立的指標,可用於執行分析或比較追蹤記錄。

建議您使用系統追蹤記錄執行下列工作:

  • 診斷延遲問題。系統追蹤記錄非常適合用來找出延遲、等待或排程問題造成的延遲問題。其他剖析器 (例如以樣本為準的設定檔) 不會提供系統追蹤記錄提供的時間資訊。

  • 找出重複的運算。追蹤功能可顯示特定計算是否重複執行,這可能表示有不必要的作業。

  • 診斷鎖定爭用問題。有了執行緒狀態和切片資訊,顯示資源遭到封鎖的時間,您就能判斷鎖定 (例如 synchronized 區塊) 是否導致使用者歷程延遲。

  • 瞭解應用程式中的多執行緒。追蹤記錄會顯示多個執行緒的檢視畫面,並顯示每個執行緒的狀態,以及系統或應用程式新增的任何追蹤記錄切片。這個多執行緒檢視畫面可協助您瞭解哪些執行緒處於活動或休眠狀態,以及執行緒執行的內容和互動方式。

  • 執行複雜的成效分析。系統追蹤記錄功能提供強大的使用者介面,並可顯示各類資訊,因此非常適合用來偵錯各種效能問題,包括延遲、記憶體和電池用量。

系統追蹤記錄也支援使用 PerfettoSQL 查詢。這項強大的功能可讓您:

  • 擷取特定資料。
  • 將追蹤記錄資料轉換為自訂指標。
  • 從查詢建立偵錯軌跡,方便在 Perfetto UI 中以視覺化方式呈現最重視的項目。
  • 直接在 Perfetto UI 中執行複雜的分析作業。

堆疊樣本快照

堆疊樣本
設定檔範例
圖 2.:堆疊範例設定檔。

堆疊範例剖析檔會記錄程式碼執行的範例,並在執行緒於 CPU 上執行工作時,以設定的速率儲存呼叫堆疊資訊。有助於瞭解程式碼在執行期間的作用。

建議使用堆疊樣本執行下列操作:

  • 最佳化熱點。堆疊樣本有助於找出 CPU 活動量大的程式碼部分,也就是執行緒經常處於「執行中」狀態。
  • 瞭解程式碼執行。堆疊樣本可協助您瞭解程式碼集的整體行為。
  • 找出不應執行的程式碼。您可能會發現不應執行的呼叫堆疊,這代表有立即最佳化的機會。

記憶體快照資料

記憶體快照資料範例
圖 3.:記憶體快照資料範例。

Java 記憶體快照資料會顯示應用程式 Java 堆積記憶體的快照。這個快照包含所有物件,以及擷取傾印時物件之間的參照關係。

建議您收集堆積傾印,以便執行下列操作:

  • 找出重複的物件。記憶體快照資料會顯示即時物件的數量,有助於追蹤重複物件。也會提供物件參照,協助您找出物件的建立位置。
  • 找出記憶體流失問題。記憶體快照資料可顯示在擷取快照資料時,不應再使用的記憶體,指出潛在的記憶體流失情形。
  • 找出可最佳化的物件。記憶體快照資料會顯示使用大量記憶體的物件及其計數,有助於找出記憶體使用效率不彰的模式。

堆積設定檔

堆積設定檔範例
圖 4.:堆積設定檔範例。

堆積設定檔有原生和 Java 兩種版本,非常適合用來偵錯記憶體問題。這類樣本與呼叫堆疊樣本類似,但不是測量 CPU 週期,而是在分配記憶體時取樣。

建議您使用堆積設定檔完成下列事項:

  • 減少記憶體抖動。堆積設定檔會提供記憶體配置的程式碼位置範例。這有助於找出會建立大量暫時物件的區域,這些物件可能會導致應用程式中頻繁發生垃圾收集 (GC) 作業。
  • 找出記憶體流失問題。記憶體堆積分析器可與其他記憶體分析器搭配使用,診斷及修正記憶體流失問題。可協助您找出分配的記憶體遠超出預期的位置。

合併設定檔

您通常會使用單一設定檔分析效能。不過,收集多個設定檔或單一合併設定檔,通常能提供更完整的資訊,有助於診斷單一設定檔無法解決的複雜問題。

以下是合併設定檔的優點:

  • 情境 1:調查未插碼的程式碼。系統追蹤記錄可能會顯示您已監控作業的延遲時間。不過,您可能需要更多資訊,瞭解在這些時間執行的程式碼中,未插樁的部分。如要進行調查,請擷取呼叫堆疊設定檔,瞭解執行的程式碼。然後,您可以新增更多追蹤記錄切片,進一步改善追蹤記錄。

  • 情境 2:分析記憶體流失和垃圾收集。假設系統追蹤記錄顯示,由於配置作業,Java 堆積記憶體持續增加,因此頻繁觸發垃圾收集 (GC)。如要瞭解已分配的物件,請取得堆積設定檔或堆積傾印。這種綜合方法有助於找出減少記憶體用量的方法。舉例來說,使用快取減少浪費或可最佳化的分配量,可能就能避免發生 GC。