浅谈调研app的方法

在实际的工作中,我们可能会对三方的app进行性能分析,那么一般都可以从哪些方面观看一个app呢?

可以从以下几个方面审视:

  • 使用top命令查看整体信息
  • 使用ps查看所有相关的线程
  • 使用用bugreport查看相关的堆栈信息
  • 分析重点so库
  • 分析log

下面以51cto为例,来看一看具体的评估方法

使用top命令查看整体信息

进程信息课题通过top命令查看

top -n 1

命令的结果如下


浅谈调研app的方法_第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

命令的结果如下


浅谈调研app的方法_第2张图片
image.png

从这里我们可以看到51cto主要有哪些线程,并且我们队%cpu(第6列)进行排序
我们可以清晰的看出,主线程是最占用cpu的,大概占用了17.8%
其次是线程14785,线程名是ExoPlayerImplIn,显然是通过exoplayer进行播放的
接下来是音视频的两个MediaCodec_loop

使用用bugreport查看相关的堆栈信息

下面我们通过bugreport看一看相关的堆栈

adb bugreport

当然了,对于第三方的app,我们能看到的堆栈信息是比较有限的
这个命令捕捉的信息量非常大,我们只关注堆栈部分


image.png

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

首先是主线程13548

浅谈调研app的方法_第3张图片
image.png

这里只能看出是一个looper,看不出其他什么信息
线程14785
浅谈调研app的方法_第4张图片
image.png

这是一个native的handler,目前也看不出执行什么
当然,由于权限的问题,有时看不出具体的调用方式

分析重点so库

比如上面我们看到了有libjiagu.so
我们可以用以下方法查看so的接口

readelf -s libjiagu.so

结果如下


浅谈调研app的方法_第5张图片
image.png

这里需要我们自己进行进一步的筛选

分析log

最后一步就是查看相关的log了,我们可以分线程看log
比如14785线程


浅谈调研app的方法_第6张图片
image.png

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

你可能感兴趣的:(浅谈调研app的方法)