AS3.0 Profiler 效能分析利器

maweiliang發表於2017-12-19

今年早些時候as升級到了3.0版本,自己前兩天升級了,發現之前我們熟悉的 Android Monitor 不在了,取而代之的是Android Profiler,就參照官方文件過了一遍。

1:Android Profiler的是使用流程:

1.點選工具欄的圖示即可開啟

AS3.0 Profiler 效能分析利器
在Android Profiler視窗的頂部,如圖所示,選擇裝置
1
和你想要配置的app程式
2
當我們連線一個裝置後,開啟Android Profiles執行我們的應用程式時,它會預設選中我們的程式, Android Profiler顯示如圖1(圖片來自官網),
圖1
如果我們連線了多個裝置可以在按鈕
1
的位置選擇裝置,通過按鈕
2
的位置選擇想要的app程式,工具最底部顯示了一個時間軸,其中包含了CPU、記憶體和網路使用的實時圖。該視窗還包括時間軸縮放控制按鈕
3
,一個跳轉到實時更新的按鈕
4
,以及顯示活動狀態、使用者輸入事件和螢幕旋轉事件
5
的事件時間軸。

我們想要檢視對應工具詳細的分析工具,只要單擊效能資料相對應的圖即可。下看看對應工具詳細的使用。

2:記憶體工具

2.1記憶體工具簡述(Memory Profiler)

我們開啟Memory Profiler後介面如下圖(圖片來自官網)

memory
如圖所示,記憶體剖析器的預設檢視包括以下內容:

1
:強制執行垃圾收集事件的按鈕
2
:捕獲堆轉儲的按鈕
3
:一個記錄記憶體分配的按鈕,當連線到執行Android7.1或更低的裝置時,該按鈕才會出現
4
:放大/退出時間線按鈕
5
:可以跳轉到實時記憶體資料的按鈕。
6
:事件時間軸,顯示活動狀態、使用者輸入事件和螢幕旋轉事件。
7
:記憶體使用時間線,包括以下內容: 一個堆疊圖,顯示每個記憶體類別的記憶體大小,如左側的y軸和頂部的顏色鍵。 虛線表示已分配物件的數量,如右側的y軸所示。 每個垃圾收集事件的圖示

2.2:記憶體計算指標

根據Android系統,你在記憶體分析器的頂部看到的數字(如下圖)基於你的應用所提交的所有私有記憶體頁面。此計數不包括與系統或其他應用程式共享的頁。

AS3.0 Profiler 效能分析利器
記憶體類別如下:

  • Java:從Java或Kotlin程式碼中分配的物件的記憶體
  • Native:從C或c++程式碼中分配的物件的記憶體,即使你沒有在app中使用c++,你可能會看到一些本地記憶體,因為Android框架使用Native記憶體來處理各種任務,比如處理影象資產和其他圖形——即使你寫的程式碼是Java或Kotlin
  • Graphics:用於圖形緩衝區佇列的記憶體用於顯示螢幕上的畫素,包括GL表面、GL紋理等。(注意,這是與CPU共享的記憶體,而不是專用的GPU記憶體)
  • Stack:在你的應用程式中,Native和Java棧使用的記憶體。這通常與你的應用程式執行的執行緒數有關
  • Code:您的應用程式用於程式碼和資源的記憶體,如dex位元組碼,優化或編譯的dex程式碼。所以庫和字型
  • Other:應用程式使用的記憶體,系統不確定如何分類
  • Allocated:應用程式分配的Java/Kotlin物件的數量。這並不計算用C或c++分配的物件

注意:當前應用程式中,native記憶體統計值可能會偏大,因為分析工具的一部記憶體也被算進去了,多達10MB的記憶體被新增到~100k物件,在未來版本的工具中,這些數字將從您的資料中過濾出來。

2.3:檢視記憶體分配情況

單擊工具欄記錄記憶體分配在記憶體分析器 我們想要檢視某一時刻程式的記憶體分配情況也很簡單,如下圖:

記憶體分配
最後的介面如下圖
最後結果

2.4 捕獲heap dump

heap dump顯示在你捕獲heap dump時應用程式中的哪些物件正在使用記憶體,特別是在擴充套件的使用者會話之後,heap dump可以通過顯示仍在記憶體中的物件來幫助識別記憶體洩漏。一旦捕獲heap dump,可以檢視以下內容:

  • 應用分配了哪些型別的物件,以及每個物件的數量
  • 每個物件使用多少記憶體。
  • 每個物件的引用都被儲存在你的程式碼中。
  • 呼叫堆疊分配物件的位置,(當您在錄製分配時捕獲heap dump 時,呼叫堆疊當前僅在Android 7.1中使用堆轉儲時才可用。

要捕獲heap dump,在Memory Profiler工具欄中單擊Dump Java heap按鈕即可 在轉儲堆時,Java記憶體量可能會暫時增加,因為堆轉儲發生在和你的應用程式相同的程式,並需要一些記憶體來收集資料,heap dump出現在記憶體時間線下方,顯示了堆中的所有型別,如圖下圖所示。

heap dump
在圖中可以看到Class Name列表,,在列表中可以看到以下資訊:

  • Alloc Count:堆中的分配數量。
  • Native Size:此物件型別使用的Native記憶體總量(以位元組為單位),此列僅適用於Android 7.0及更高版本。 你會在這裡看到一些在Java中分配的物件的記憶體,因為Android為一些框架類(比如Bitmap)使用本地記憶體。
  • Shallow Size:此物件型別使用的Java記憶體總量(以位元組為單位)
  • Retained Size:由於此類的所有例項而保留的記憶體總大小(以位元組為單位)在class 列表頂部,可以使用左側的下拉選單在下列堆轉儲之間切換
  • Default heap:當系統沒有指定堆時。
  • App heap:你的應用程式分配記憶體的主要堆。
  • Image heap:系統引導映像,包含在引導期間預載入的類,這裡的分配保證不會移動或消失,
  • Zygote heap:Android系統中的應用程式程式分支的寫入時複製堆。

2.5 將 heap dump 儲存為 HPROF

如果你想儲存 heap dump為日後檢視,匯出heap dump到一個HPROF檔案的話,如需要點選 Export capture to file按鈕,如下圖

AS3.0 Profiler 效能分析利器
如果你需要從Android HPROF檔案格式轉換為Java SE HPROF格式,可以使用hprof-conv工具進行轉化,它的位置在 android_sdk/platform-tools/目錄下,執行hprof-conv命令

hprof-conv heap-original.hprof heap-converted.hprof
複製程式碼

3:CPU分析工具(CPU Profiler)

當你開啟CPU分析器,它會立即開始顯示應用程式的CPU使用率和執行緒的活動,如下圖:

cpu
CPU Profiler的預設檢視包含以下內容:

1
:Event timeline:顯示應用在他們的生命週期中不同狀態間轉換時的活動,並指示使用者與裝置的互動,包括螢幕旋轉事件
2
:CPU timeline:顯示應用程式的實時CPU使用情況(佔可用CPU總時間的百分比)以及應用程式正在使用的執行緒總數。時間表還顯示了其他程式(如系統程式或其他應用程式)的CPU使用情況,因此您可以將其與應用程式的使用情況進行比較。可以通過沿著時間軸的橫軸移動滑鼠來檢查歷史CPU使用率資料。
3
:Thread activity timeline:列出屬於你的應用程式程式的每個執行緒,並使用下面列出的顏色在時間線上指示其活動。記錄方法跟蹤之後,可以從此時間線中選擇一個執行緒,以在跟蹤窗格中檢查其資料。
  • 綠色:執行緒處於活動狀態或準備好使用CPU。也就是說,它處於“執行”或“可執行”狀態。
  • 黃色:執行緒處於活動狀態,但它正在等待I / O操作(例如磁碟或網路I / O),然後才能完成工作。
  • 灰色:執行緒正在休眠,不佔用任何CPU時間。當執行緒需要訪問尚不可用的資源時,有時會發生這種情況。執行緒進入自願睡眠,或者核心使執行緒進入休眠狀態,直到需要的資源變為可用。
4
:Recording configurations:允許您選擇以下選項之一來確定探查器如何記錄方法跟蹤。
  • Sampled(取樣):一個預設配置,可以在應用程式執行期間頻繁地捕獲應用程式的呼叫堆疊。分析器比較捕獲的資料集合以獲取關於應用程式碼執行的時間和資源使用資訊。基於抽樣的跟蹤的一個固有問題是,如果您的應用程式在捕獲呼叫堆疊之後輸入方法,並在下次捕獲之前退出該方法,則該方法呼叫不會被分析器記錄。如果您對如此短的生命週期跟蹤方法感興趣,則應使用檢測跟蹤。

  • Instrumented:預設配置,在執行時測試您的應用程式,以在每個方法呼叫的開始和結束時記錄一個時間戳。收集時間戳並進行比較,以生成方法跟蹤資料,包括定時資訊和CPU使用情況。請注意,與每種方法相關的開銷都會影響執行時效能,並可能影響分析資料 - 對於生命週期相對較短的方法來說,這一點更為明顯。此外,如果您的應用程式在很短的時間內執行大量方法,分析器可能會快速超出其檔案大小限制,並且無法記錄任何進一步的跟蹤資料。

  • Edit configurations:允許您更改上述取樣和檢測記錄配置的某些預設設定,並將其儲存為自定義配置。

5
:Record button:開始和停止錄製方法跟蹤按鈕

4:網路分析工具(Network Profiler)

網路分析工具比較簡單,介面如下圖:

網路
視窗的頂部的
1
處,可以看見wifi無線訊號的強弱,在時間線上可以在
2
處點選和拖動一部分的時間線來檢測流量,然後在視窗
3
中會顯示所選時間段內收發的檔案,包括檔名,大小,型別,狀態和花費時間,你可以對視窗
3
的列表根據列來進行排序。還可以檢視所選時間段的詳細拆分,拆分的timeline可以顯示檔案是什麼時候收發的,點選視窗3的其中一個檔案,可以在視窗
4
中檢視檔案的詳細資訊。通過切換視窗
4
上方標籤可以檢視response data(響應資料), header information, or the call stack(呼叫棧)。

相關文章