美文网首页
Android 卡顿分析

Android 卡顿分析

作者: 嘎嘣脆糖 | 来源:发表于2020-01-29 23:01 被阅读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绘制过程的时间过长的问题。

    相关文章

      网友评论

          本文标题:Android 卡顿分析

          本文链接:https://www.haomeiwen.com/subject/poblwctx.html