Android 應用啟動速度優化之 Systrace 的使用

Systrace 簡介

Android 應用啟動速度優化方式有很多方法,不過在優化之前,需要找到應用啟動速度的瓶頸,找到關鍵點之後,再去優化,則可以達到事半功倍的效果。 Google 提供了很多 Debug 工具來幫助我們優化應用,這其中就包括 Systrace 工具。

Systrace 是 Android 4.1 中新增的性能數據採樣和分析工具。它可幫助開發者收集 Android 關鍵子系統(如 surfaceflinger、WindowManagerService 等 Framework 部分關鍵模塊、服務,View 系統等)的運行信息,從而幫助開發者更直觀的分析系統瓶頸,改進性能。

Systrace 的功能包括跟蹤系統的 I/O 操作、內核工作隊列、CPU 負載以及 Android 各個子系統的運行狀況等。在 Android 平台中,它主要由三部分組成:

  • 內核部分

    Systrace 利用了Linux Kernel 中的 ftrace 功能。所以,如果要使用 Systrace 的話,必須開啟 kernel 中和 ftrace 相關的模塊。

  • 數據採集部分

    Android 定義了一個 Trace 類。應用程序可利用該類把統計信息輸出給 ftrace。同時,Android 還有一個 atrace 程序,它可以從 ftrace 中讀取統計信息然後交給數據分析工具來處理。

  • 數據分析工具

    Android 提供一個 systrace.py(python腳本文件,位於Android SDK 目錄 /tools/systrace 中,其內部將調用 atrace 程序)用來配置數據採集的方式(如採集數據的標籤、輸出文件名等)和收集 ftrace 統計數據並生成一個結果網頁文件供用戶查看。

  • 從本質上說,Systrace 是對 Linux Kernel 中 ftrace 的封裝。應用進程需要利用 Android 提供的 Trace 類來使用 Systrace。

    關於 Systrace 的官方介紹和使用可以看這裡: Systrace 官方文檔 。

    Systrace 用法

    使用 Systrace前,要先了解一下 Systrace 在各個平台上的使用方法,鑒於大家使用 Eclipse 和 Android Studio 的居多,所以直接摘抄官網關於這個的使用方法,不過不管是什麼工具,流程是一樣的:

  • 手機準備好你要進行抓取的界面

  • 點擊開始抓取(命令行的話就是開始執行命令)

  • 手機上開始操作

  • 設定好的時間到了之後,會將生成 Trace 文件,使用 Chrome 將這個文件打開進行分析

  • 下面介紹了四種使用工具抓取 Systrace 的方法:

    使用 Eclipse

    1. In Eclipse, open an Android application project.

    2. Switch to the DDMS perspective, by selecting Window > Perspectives > DDMS.

    3. In the Devices tab, select the device on which to run a trace. If no devices are listed, make sure your device is connected via USB cable and that debugging is enabled on the device.

    4. Click the Systrace icon at the top of the Devices panel to configure tracing.

    5. Set the tracing options and click OK to start the trace.

    使用 Android Studio

    1. In Android Studio, open an Android application project.

    2. Open the Device Monitor by selecting Tools > Android > Monitor.

    3. In the Devices tab, select the device on which to run a trace. If no devices are listed, make sure your device is connected via USB cable and that debugging is enabled on the device.

    4. Click the Systrace icon at the top of the Devices panel to configure tracing.

    5. Set the tracing options and click OK to start the trace.

    使用 Device Monitor

    1. Navigate to your SDK tools/ directory.

    2. Run the monitor program.

    3. In the Devices tab, select the device on which to run a trace. If no devices are listed, make sure your device is connected via USB cable and that debugging is enabled on the device.

    4. Click the Systrace icon at the top of the Devices panel to configure tracing.

    5. Set the tracing options and click OK to start the trace.

    使用命令行工具( 強烈推薦 )

    命令行形式比較靈活,速度也比較快,一次性配置好之後,以後再使用的時候就會很快就出結果.

    $ cd android-sdk/platform-tools/systrace$ python systrace.py --time=10 -o mynewtrace.trace sched gfx view wm

    從上面的命令可以看到 Systrace 工具的位置,只需要在 Bash 中配置好對應的路徑和 Alias,使用起來還是很快速的。另外需要注意的是: User版本是不可以抓 Trace 的,只有 ENG 版本或者 Userdebug 版本才可以 ,是不是又多了一個買 Nexus5 的理由 ^_^。

    抓取結束後,會生成對應的 Trace 文件,注意這個文件只能被 Chrome 打開。關於如何分析 Trace 文件,我們下面的章節會講。

    Systrace 命令參數

    不論使用那種工具,在抓取之前都會讓選擇參數,下面說一下這些參數的意思:

  • -h, –help Show the help message.(幫助)

  • -o Write the HTML trace report to the specified file.(即輸出文件名,)

  • -t N, –time=N Trace activity for N seconds. The default value is 5 seconds. (Trace抓取的時間,一般是 : -t 8)

  • -b N, –buf-size=N Use a trace buffer size of N kilobytes. This option lets you limit the total size of the data collected during a trace.

  • -k

  • —ktrace= Trace the activity of specific kernel functions, specified in a comma-separated list.

  • -l, –list-categories List the available tracing category tags. The available tags are(下面的參數不用翻譯了估計大家也看得懂,貼官方的解釋也會比較權威,後面分析的時候我們會看到這些參數的作用的):

  • gfx – Graphics

  • input – Input

  • view – View

  • webview – WebView

  • wm – Window Manager

  • am – Activity Manager

  • audio – Audio

  • video – Video

  • camera – Camera

  • hal – Hardware Modules

  • res – Resource Loading

  • dalvik – Dalvik VM

  • rs – RenderScript

  • sched – CPU Scheduling

  • freq – CPU Frequency

  • membus – Memory Bus Utilization

  • idle – CPU Idle

  • disk – Disk input and output

  • load – CPU Load

  • sync – Synchronization Manager

  • workq – Kernel Workqueues Note: Some trace categories are not supported on all devices. Tip: If you want to see the names of tasks in the trace output, you must include the sched category in your command parameters.

  • 上面的參數雖然比較多,但使用工具的時候不需考慮這麼多,在對應的項目前打鉤即可,命令行的時候才會去手動加參數:

    我們一般會把這個命令配置成Alias,配置如下:

    alias st-start="python /path/to/android-studio/sdk/platform-tools/systrace/systrace.py" alias st-start-gfx = "st-start -t 8 gfx input view sched freq wm am hwui workq res dalvik sync disk load perf hal rs idle mmc"

    這樣在使用的時候,可以直接敲 st-start-gfx 即可,當然為了區分和保持各個文件,還需要加上 -o xxx.Trace 。上面的命令和參數不必一次就理解,只需要記住如何簡單使用即可,在分析的過程中,這些東西都會慢慢熟悉的。

    Systrace Demo

    Systrace 抓取結束後,會生成一個文件,這個文件必須使用 Chrome 打開。下面的圖是一張典型的應用啟動時候的 Systrace 圖:


    推薦閱讀:

    優化網站項目,請各位支持一下!
    【優化演算法】一文搞懂RMSProp優化演算法
    乾貨案例:如何操作一個新站的優化?
    SEO最基本優化
    優化方法與TensorFlow程序用例

    TAG:Android應用 | Android | 速度 | 優化 | trace |