Android 卡顿分析

2020-01-29  本文已影响0人  嘎嘣脆糖

卡顿原因

造成Android系统卡顿的原因有很多,但是追根究底都会反映在cpu时间上.通过分析内存信息和cpu信息就可以为我们提供解决卡顿的思路和方向

内存和cpu状态

使用

adb shell dumpsys meminfo

可以很方便的查看各个进程的进程id (pid) ,在得到要查询的进程的进程id后可以使用

 adb shell dumpsys meminfo 进程id

来查看当前进程id下的进程内存和cpu使用情况。

图中即为进程号为28868的信息


dumpsys_meminfo.png

使用

top -pid <进程id>
top.png

命令可以得到各进程的cpu 使用情况,也可以使用

adb shell dumpsys cpuinfo
dumpsys_cpuinfo.png

几个常用的命令。例 如,top 命令可以帮助我们查看哪个进程是 CPU 的消耗大户;vmstat 命令可以实时动态 监视操作系统的虚拟内存和 CPU 活动;strace 命令可以跟踪某个进程中所有的系统调 用。

Android 卡顿排查工具

按照上面各种 Linux 命令组合来排查问题太麻烦了.

在android中 Traceview 和 systrace 都是我们比较熟悉的排查卡顿的工具,从实现上 这些工具分为两个流派。

第一个流派是 instrument。获取一段时间内所有函数的调用过程,可以通过分析这段时间 内的函数调用流程,再进一步分析待优化的点。

第二个流派是 sample。有选择性或者采用抽样的方式观察某些函数调用过程,可以通过 这些有限的信息推测出流程中的可疑点,然后再继续细化分析。

这两种流派有什么差异?我们在什么场景应该选择哪种合适的工具呢?还有没有其他有用 的工具可以使用呢?下面我们一一来看。

1.TraceView

通过记录下cpu时间片段执行的方法耗时,来定位耗时方法,进而进行定位问题
可以使用android studio 中的profiler分析工具进行记录,通过生成trace文件进而分析问题,也可以使用代码进行插桩生成的.trace文件通过as打开进行分析,trace文件如下图

[站外图片上传中...(image-45a691-1580310027475)]

可以看到每个函数的具体的执行时间和调用栈以及当前的所有线程
这部分仅仅进行简单的说明,但是复杂问题的分析远没有这么简单,需要针对问题进行分析

2.systrace

首先需要python环境,在platform-toos/systrace文件夹下,执行 python systrace.py -l查看命令是否正常。

options选项
-o <FILE> 输出的目标文件
-t N, –time=N 执行时间,默认5s
-b N, –buf-size=N buffer大小(单位kB),用于限制trace总大小,默认无上限
-k <KFUNCS>,–ktrace=<KFUNCS> 追踪kernel函数,用逗号分隔
-a <APP_NAME>,–app=<APP_NAME> 追踪应用包名,用逗号分隔
–from-file=<FROM_FILE> 从文件中创建互动的systrace
-e <DEVICE_SERIAL>,–serial=<DEVICE_SERIAL> 指定设备
-l, –list-categories 列举可用的tags
category 解释
gfx Graphics
input Input
view View System
webview WebView
wm Window Manager
am Activity Manager
sm Sync Manager
audio Audio
video Video
camera Camera
hal Hardware Modules
app Application
res Resource Loading
dalvik Dalvik VM
rs RenderScript
bionic Bionic C Library
power Power Management
sched CPU Scheduling
irq IRQ Events
freq CPU Frequency
idle CPU Idle
disk Disk I/O
mmc eMMC commands
load CPU Load
sync Synchronization
workq Kernel Workqueues
memreclaim Kernel Memory Reclaim
regulators Voltage and Current Regulators

e.g 输出5s内的所有信息到当前目录的trace.html

python systrace.py -b 32768 -t 5 -o trace.html gfx input view webview wm am sm audio video camera hal app res dalvik rs bionic power sched irq freq idle disk mmc load sync workq memreclaim regulators

e.g 输出包名为com.example.myapplication 10s内的所有信息到当前目录的trace2.html

systrace.py -t 10 -o trace2.html wm gfx input view sched freq -a com.example.myapplication

文件生成后可以使用chrome来打开。


systrace_1.png
systrace2.png
systarace3.png

根据生成的文件去分析具体问题,比如图片中的显示的问题就是layout过程中的耗时导致的丢帧以及在draw绘制过程的时间过长的问题。

上一篇下一篇

猜你喜欢

热点阅读