在实际的工作中,我们可能会对三方的app进行性能分析,那么一般都可以从哪些方面观看一个app呢?
可以从以下几个方面审视:
- 使用top命令查看整体信息
- 使用ps查看所有相关的线程
- 使用用bugreport查看相关的堆栈信息
- 分析重点so库
- 分析log
下面以51cto为例,来看一看具体的评估方法
使用top命令查看整体信息
进程信息课题通过top命令查看
top -n 1
命令的结果如下

从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
命令的结果如下

从这里我们可以看到51cto主要有哪些线程,并且我们队%cpu(第6列)进行排序
我们可以清晰的看出,主线程是最占用cpu的,大概占用了17.8%
其次是线程14785,线程名是ExoPlayerImplIn,显然是通过exoplayer进行播放的
接下来是音视频的两个MediaCodec_loop
使用用bugreport查看相关的堆栈信息
下面我们通过bugreport看一看相关的堆栈
adb bugreport
当然了,对于第三方的app,我们能看到的堆栈信息是比较有限的
这个命令捕捉的信息量非常大,我们只关注堆栈部分

可以通过pid找到相应的堆栈,这里可以看出进程名,和使用的so库
下面依次看看重点的线程
首先是主线程13548

这里只能看出是一个looper,看不出其他什么信息
线程14785

这是一个native的handler,目前也看不出执行什么
当然,由于权限的问题,有时看不出具体的调用方式
分析重点so库
比如上面我们看到了有libjiagu.so
我们可以用以下方法查看so的接口
readelf -s libjiagu.so
结果如下

这里需要我们自己进行进一步的筛选
分析log
最后一步就是查看相关的log了,我们可以分线程看log
比如14785线程

从log信息可以看出,是音频相关的线程
网友评论