卡顿原因
造成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绘制过程的时间过长的问题。
网友评论