美文网首页
Systrace使用教程

Systrace使用教程

作者: 董江鹏 | 来源:发表于2019-05-23 17:59 被阅读0次

Systrace 无疑是性能优化神器,如果能辅以函数插桩,则能发挥它的最大威力,让所有的性能问题都无处遁形,比如常见的锁竞争、io等待和线程竞争等等问题。此文先只介绍Systrace的基本用法。

使用Systrace有两种方式,一种是使用python命令运行,另一种是通过DDMS运行,自行选择就行。

收集信息

  1. 首先,用来调试的App工程需要在清单文件里将Application的debuggable开关打开。
  2. 在要观察的代码前后加上Trace的头尾函数,编译并安装到手机。
  3. 打开DDMS,进入Systrace工具,选择调试进程,以及记录时长。按下确定之后,操作手机,便可以记录这段时间的运行情况。


    ddms.png
systrace.png
  1. 用Chrome浏览器打开生成的html文件。找到Trace头函数带上的信息,并分析。

分析数据

以下给出三种不同类型的分析过程,作为示例。

  1. 计算密集型任务


    cpu_work.png

    我们一般知道,图片和视频之类处理、简单内存操作,差不多都归属于计算密集型任务,比较占用CPU,需要控制并行的线程数量,避免CPU进行频繁的线程切换,这种类型的任务就需要放进计算密集型的线程池中。
    如图所示,这个选中的函数是在处理图片,整个函数总耗时(Wall Duration)58ms,CPU工作(CPU Duration)了44ms。

  2. IO 密集型任务


    io_work.png

    常见的IO操作就是读写文件、网络请求,这种类型的任务大量时间在等待系统调用的返回和硬件的数据处理,基本不占CPU,可以提交并行的线程数量,发挥CPU的最大效率,这种类型的任务就需要放进IO密集型的线程池中。
    如图所示,这个选中的函数是在进行网络请求,整个函数总耗时(Wall Duration)138ms,CPU工作(CPU Duration)了8ms。

  3. 锁竞争


    lock.png

    由synchronized关键字产生的锁竞争会明显地显示出来。
    如图所示,这个选中的函数需要的锁被线程Id为16283的线程占用长达1647ms之久,就需要好好优化了。

小结

如果嫌Trace添加起来太累,可以考虑函数插桩。
愿大家玩得开心。

相关文章

网友评论

      本文标题:Systrace使用教程

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