1. 程式人生 > >os-android:效能分析工具(systrace,starce,top,iotop)

os-android:效能分析工具(systrace,starce,top,iotop)

os-android:效能分析工具(systrace,starce,atrace)

1 超級神器 systrace

Systrace 允許你在系統級別收集和檢查裝置上執行的所有程序的計時資訊。Systrace採集核心、Android系統和應用層的資訊,然後生成HTML影象化報告。如果想分析Android系統或者app的問題,首先我們需要抓取Systrace檔案分析並找出引起系統卡頓,瞬間就可定位出卡頓的原因。除錯Native層的卡頓問題,定製化加些ATRACE標記,找出卡頓原因也輕鬆。

工具位置:${Android-SDK}\platform-tools\systrace 文件:

https://source.android.com/devices/tech/debug/systrace。

systrace整合在Android Device Monitor中,工具位置: Android-SDK\tools\monitor.bat。Android Device Monitor可以進行螢幕截圖、dump檢視結構和抓取systrace。除了通過Android Device Monitor使用systrace, 也可以直接呼叫Android-SDK\platform-tools\systrace\systrace.py

1.1 檢視支援哪些trace型別

rk3328_box:/ # python systrace.py --list-categories
rk3328_box:/ # py -2 systrace.py --list-categories

1.2 抓trace並輸出

rk3328_box:/ # #包含問題現象的,才有分析價值
rk3328_box:/ # py -2 systrace.py -o mynewtrace.html -t 10 audio video network mmc sync sched freq idle am wm gfx view hal

1.3 使用Android-Studio的systrace

Android Studio 3.1以後,DDMS 和 Systrace、Hierarchy Viewer都不用了。
使用Android Profiler替代DDMS 和 Systrace,Layout Inspector 替代Hierarchy Viewer。

1.4 目標板上使用atrace

rk3328_box:/ # atrace -o /data/new_trace.html -t 15 -b 4096 audio video network mmc sync sched
rk3328_box:/ # atrace -t 10 -b 4096 audio video network mmc sync sched

1.5 chrome檢視trace

在chrome的位址列中敲入chrome://tracing/ 然後通過load按鈕載入你的trace檔案

1.6 程式碼中新增Trace

#define ATRACE_TAG ATRACE_TAG_GRAPHICS
#include "utils/Trace.h"
ATRACE_CALL();
ATRACE_BEGIN(name);
ATRACE_END();
ATRACE_NAME(name);

2 strace 檢視系統呼叫

strace 是Linux下的除錯利器,可以跟蹤所有的系統呼叫,列印系統呼叫的引數和返回值; strace還可以指定跟蹤子執行緒/子程序,支援多執行緒程式的除錯。Android的底層是Linux作業系統, strace一般韌體預設支援。strace本身不依賴於系統,從一個機器拷貝到另一個機器直接能用。strace 依賴三個最基本的庫:libc.so, libstdc++.solibm.so。放心使用就是了。

rk3328_box:/ # strace  -h
Filtering:
  -e expr        a qualifying expression: option=[!]all or option=[!]val1[,val2]...
     options:    trace, abbrev, verbose, raw, signal, read, write, fault
  -P path        trace accesses to path

Tracing:
  -b execve      detach on execve syscall
  -D             run tracer process as a detached grandchild, not as parent
  -f             follow forks

rk3328_box:/ # ps -A | grep mediaserver
rk3328_box:/ # strace -f -p 6605
rk3328_box:/ # strace -f -p `ps -A | grep mediaserver | awk '{print $2}'`

rk3328_box:/ # ps -A | grep surface | awk '{print $2}'
rk3328_box:/ # strace -f -p 21962
rk3328_box:/ # strace -f -tt -T -p <pid>
rk3328_box:/ # strace -p <pid> -c

3 top 和 iotop 分析程式效能

rk3328_box:/ # top -m 10
rk3328_box:/ # iotop -m 10