在實際的工作中,我們可能會對三方的app進行性能分析,那么一般都可以從哪些方面觀看一個app呢?
可以從以下幾個方面審視:
- 使用top命令查看整體信息
- 使用ps查看所有相關的線程
- 使用用bugreport查看相關的堆棧信息
- 分析重點so庫
- 分析log
下面以51cto為例,來看一看具體的評估方法
使用top命令查看整體信息
進程信息課題通過top命令查看
top -n 1
命令的結果如下

image.png
從top命令中,我們可以看到51cto的進程和使用cpu的情況,進程號為13548,大概占cpu45.1%
使用ps查看所有相關的線程
那么51cto都有哪些線程呢?
我們可以通過ps命令查看
ps -ef -o pid,tid,user,pr,ni,%cpu,s,virt,res,pcy,cmd,name | sort -r -k 6 -n | grep "cto51" | head -20
命令的結果如下

image.png
從這里我們可以看到51cto主要有哪些線程,并且我們隊%cpu(第6列)進行排序
我們可以清晰的看出,主線程是最占用cpu的,大概占用了17.8%
其次是線程14785,線程名是ExoPlayerImplIn,顯然是通過exoplayer進行播放的
接下來是音視頻的兩個MediaCodec_loop
使用用bugreport查看相關的堆棧信息
下面我們通過bugreport看一看相關的堆棧
adb bugreport
當然了,對于第三方的app,我們能看到的堆棧信息是比較有限的
這個命令捕捉的信息量非常大,我們只關注堆棧部分

image.png
可以通過pid找到相應的堆棧,這里可以看出進程名,和使用的so庫
下面依次看看重點的線程
首先是主線程13548

image.png
這里只能看出是一個looper,看不出其他什么信息
線程14785

image.png
這是一個native的handler,目前也看不出執(zhí)行什么
當然,由于權限的問題,有時看不出具體的調用方式
分析重點so庫
比如上面我們看到了有l(wèi)ibjiagu.so
我們可以用以下方法查看so的接口
readelf -s libjiagu.so
結果如下

image.png
這里需要我們自己進行進一步的篩選
分析log
最后一步就是查看相關的log了,我們可以分線程看log
比如14785線程

image.png
從log信息可以看出,是音頻相關的線程