广告
返回顶部
首页 > 资讯 > 精选 >性能分析工具Systrace如何使用
  • 884
分享到

性能分析工具Systrace如何使用

2023-07-05 08:07:10 884人浏览 独家记忆
摘要

这篇“性能分析工具Systrace如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“性能分析工具Systrace如何使用

这篇“性能分析工具Systrace如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“性能分析工具Systrace如何使用”文章吧。

    Systrace介绍

    Systrace 是Android平台提供的一款工具,用于记录短期内的设备活动。该工具会生成一份报告,其中汇总了Android内核中的数据,例如CPU调度程序、磁盘活动和应用线程

    这份报告可帮助我们了解如何以最佳方式改善应用或游戏的性能。

    Systrace 工具用于显示整个设备在做些什么,不过也可用于识别应用中的卡顿。Systrace 的系统开销非常小,因此你可以在插桩测试期间体验实际卡顿情况。

    Systrace报告示例:

    性能分析工具Systrace如何使用

    这份报告提供了 Android 设备在给定时间段内的系统进程的总体情况,还会检查所捕获的跟踪信息,以突出显示它所观察到的问题(例如界面卡顿或耗电量高)。

    Systrace使用方法详解

    要想使用Systrace分析性能,我们首先需要找到Systrace工具,以及使用该工具生成一份.html的报告文件。

    使用命令行捕获Systreace报告文件

    systrace命令

    systrace命令会调用Systrace工具,以收集和检查设备上在系统一级运行的所有进程的时间信息。

    systrace命令是一个python脚本,所以需要进行如下准备:

    • Android Studio下载并安装最新的Android SDK Tools。

    • 安装Python并将其添加到工作站的执行路径中(注意,这里要求Python2.7版本)。

    • 使用USB调试连接将搭载Android 4.3(api 级别 18)或更高版本的设备连接到开发系统。

    systrace 命令在 Android SDK Tools 工具包中提供,位于 android-sdk/platfORM-tools/systrace/。

    例如,作者电脑上sstrace位置为:/Users/apple/Library/Android/sdk/platform-tools/systrace。

    命令语法

    要为应用生成HTML报告,我们需要使用以下语法从命令行运行systrace:

    python systrace.py [options] [cateGories]

    命令和命令选项

    性能分析工具Systrace如何使用

    示例1:

    python ./systrace.py -t 5 -o mynewtrace.html
    • mynewtrace.html是最终的生成产物。

    • 5代表捕获5s的数据。

    示例2:

    python systrace.py -o mynewtrace.html sched freq idle am wm gfx view \        binder_driver hal dalvik camera input res

    mynewtrace.html之后的参数,表示类别列表。

    提示:如果要在跟踪输出中查看任务名称,必须在命令参数中添加 sched 类别。

    查看已连接设备支持的类别列表

    命令如下:

    python systrace.py --list-categories

    示例:

    性能分析工具Systrace如何使用

    打开System报告

    通过以上操作,会生成一个HTML文件,我们可以使用chrome浏览器,地址栏输入chrome://tracing/ 来查看报告。

    界面如下(点击Load按钮加载HTML文件即可):

    性能分析工具Systrace如何使用

    查看报告元素

    Systrace 会生成包含多个部分的输出 HTML 文件。该报告列出了每个进程的线程。如果给定线程会渲染界面帧,该报告还会沿时间轴指明所渲染的帧。当您在报告中从左向右移动时,时间会向前推移。

    报告从上到下包含以下几个部分。

    用户互动

    第一部分包含表示应用或游戏中的具体用户互动(例如点按设备屏幕)的条形图。这些互动可用作有用的时间标记。

    性能分析工具Systrace如何使用

    CPU 活动

    下一部分显示了表示每个 CPU 中的线程活动的条形图。这些条形会显示所有应用(包括你的应用或游戏)中的 CPU 活动。

    CPU 活动部分可以展开,展开后您就可以查看每个 CPU 的时钟频率。

    图 1 展示了一个收起后的 CPU 活动部分示例,图 2 展示了显示时钟频率的展开后版本:

    性能分析工具Systrace如何使用

    性能分析工具Systrace如何使用

    系统事件

    此部分中的直方图会显示特定的系统级事件,例如特定对象的纹理计数和总大小。

    值得仔细检查的直方图是标记为 SurfaceView 的直方图。计数表示已传递到显示管道并等待显示在设备屏幕上的组合帧缓冲区的数量。由于大多数设备都会进行双重或三重缓冲,因此该计数几乎总为 0、1 或 2。

    描绘 Surface Flinger 进程(包括 VSync 事件和界面线程交换工作)的其他直方图,如图所示:

    性能分析工具Systrace如何使用

    显示帧

    描绘了一条多色线条,后面是成堆的条形。这些形状表示已创建的特定线程的状态和帧堆栈。

    堆栈的每个层级代表对 beginSection() 的一次调用,或您为应用或游戏定义的自定义跟踪事件的开头。

    性能分析工具Systrace如何使用

    每个条形堆上方的多色线条表示特定线程随时间变化的一组状态。每段线条可以包含以下颜色之一:

    • 绿色:正在运行

    • 线程正在完成与某个进程相关的工作或正在响应中断。

    • 蓝色:可运行

    • 线程可以运行但目前未进行调度。

    • 白色:休眠

    • 线程没有可执行的任务,可能是因为线程在遇到斥定时被阻止。

    • 橙色:不可中断的休眠

    • 线程在遇到 I/O 操作时被阻止或正在等待磁盘操作完成。

    • 紫色:可中断的休眠

    • 线程在遇到另一项内核操作(通常是内存管理)时被阻止。

    注意:在Systrace报告中,你可以点击该线条以确定该线程在给定时间由哪个CPU控制。

    键盘快捷键

    下表列出了查看 Systrace 报告时可以使用的键盘快捷键:

    性能分析工具Systrace如何使用

    使用工具帮助定位性能问题

    浏览 Systrace 报告时,您可以通过执行以下一项或多项操作来更轻松地识别性能问题:

    • 通过在时间间隔周围绘制一个矩形来选择所需的时间间隔。

    • 使用标尺工具标记或突出显示问题区域。

    • 依次点击 View Options > Highlight VSync,以显示每项显示屏刷新操作。

    • 如果觉得页面中的信息太多了,想要筛选,可以点击Processes菜单,在弹出列表中进行筛选。

    性能分析工具Systrace如何使用

    检查界面帧和提醒

    如图所示,Systrace 报告列出了渲染界面帧的每个进程,并指明了沿时间轴渲染的每个帧。在 16.6 毫秒内渲染的必须保持每秒 60 帧稳定帧速率的帧会以绿色圆圈表示。渲染时间超过 16.6 毫秒的帧会以黄色或红色帧圆圈表示。

    性能分析工具Systrace如何使用

    点击某个帧圆圈可将其突出显示,并提供有关系统为渲染该帧所做工作的其他信息,包括提醒。此报告还会显示系统在渲染该帧时执行的方法。您可以调查这些方法以确定界面卡顿的可能原因。

    性能分析工具Systrace如何使用

    如果所示,选择有问题的帧后,跟踪报告下方会显示一条提醒,用于指明问题所在。

    选择运行速度慢的帧后,您可能会在报告的底部窗格中看到一条提醒。

    点击窗口最右侧的Alerts标签页可以查看此工具在你的跟踪记录中发现的每条提醒以及设备触发每条提醒的次数,如下图所示。Alerts 面板可帮助你了解跟踪记录中出现的问题以及这些问题导致出现卡顿的频率。我们也可以将此面板视为要修正的错误列表。通常情况下,只需对一个区域进行细微改动或改进即可移除整组提醒。

    性能分析工具Systrace如何使用

    Systrace的扩展使用

    Systrace(系统跟踪)仅在系统级别显示进程的相关信息,这样导致有时很难知道APP的哪些方法是在给定时间针对系统事件执行的。

    例如,我们在解决卡顿问题,当查看系统跟踪信息输出后,你可能会怀疑应用中的某些方法是导致卡顿的因素。例如,如果时间轴显示某个帧的呈现速度较慢是因为 RecyclerView 花费很长时间导致的,这时我们需要更多的信息来进行判断。

    如何做呢?

    我们可以在相关代码中添加跟踪标记(定义自定义事件),然后重新运行 systrace 以获取更多信息。在新的系统跟踪信息中,时间轴会显示应用中的方法的调用时间和执行时长。

    定义自定义事件

    Android 平台提供了一个跟踪 API,可用于为特定的代码段添加标签。如果您捕获应用的“调试”版本的新系统跟踪并添加 -a 选项(如以下代码段所示),这些自定义事件便会显示在 Systrace 报告中:

        python systrace.py -a com.example.myapp -b 16384 \      -o my_systrace_report.html sched freq idle am wm gfx view binder_driver hal \      dalvik camera input res

    必须提供 -a 选项才能跟踪应用;如果没有此选项,应用的方法将不会显示在 Systrace 报告中。

    注意:该方法与使用 Debug 类不同,后者可帮助您通过生成 .trace 文件来检查应用 CPU 的详细使用情况。

    代码中添加

    在 Android 4.3(API 级别 18)及更高版本中,我们可以在代码中使用 Trace 类来定义随后会出现在 Perfetto 和 Systrace 报告中的自定义事件,如以下代码段所示。

        public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {        @Override        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {            Trace.beginSection("MyAdapter.onCreateViewHolder");            MyViewHolder myViewHolder;            try {                myViewHolder = MyViewHolder.newInstance(parent);            } finally {                // In try and catch statements, always call "endSection()" in a                // "finally" block. That way, the method is invoked even when an                // exception occurs.                Trace.endSection();            }            return myViewHolder;        }       @Override        public void onBindViewHolder(MyViewHolder holder, int position) {            Trace.beginSection("MyAdapter.onBindViewHolder");            try {                try {                    Trace.beginSection("MyAdapter.queryDatabase");                    RowItem rowItem = queryDatabase(position);                    dataset.add(rowItem);                } finally {                    Trace.endSection();                }                holder.bind(dataset.get(position));            } finally {                Trace.endSection();            }        }    }

    注意:如果多次调用 beginSection(),调用 endSection() 只会结束最后调用的 beginSection() 方法。因此,对于嵌套调用(如以下代码段中所示),请务必将每次对 beginSection() 的调用与一次对 endSection() 的调用正确匹配。

    此外,我们不能在一个线程上调用 beginSection(),而在另一个线程上结束它;而是必须在同一个线程上调用这两个方法。

    以上就是关于“性能分析工具Systrace如何使用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

    --结束END--

    本文标题: 性能分析工具Systrace如何使用

    本文链接: https://www.lsjlt.com/news/350656.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • 性能分析工具Systrace如何使用
      这篇“性能分析工具Systrace如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“性能分析工具Systrace如何使用...
      99+
      2023-07-05
    • 性能分析工具Systrace的使用及说明
      目录Systrace介绍Systrace使用方法详解使用命令行捕获Systreace报告文件打开System报告查看报告元素键盘快捷键使用工具帮助定位性能问题检查界面帧和提醒Syst...
      99+
      2023-03-03
      性能分析工具 Systrace的使用 性能分析工具Systrace
    • 如何使用systemtap调试工具分析MySQL的性能
      这篇文章将为大家详细讲解有关如何使用systemtap调试工具分析MySQL的性能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、 分析SQL语句在执行各个阶段的消耗比...
      99+
      2022-10-19
    • 性能分析工具 之 Perfetto基本使用
              Perfetto是google从Android10开始引入的一个全新的平台级跟踪分析工具。适用于Android、Linux和Chrome的更加通用和复杂的用于性能检测和跟踪分析的生产级开源项目。在android系统中对性能分...
      99+
      2023-09-05
      android 性能优化
    • 使用SQLBooster工具分析Oracle性能问题
      问题现象 下午开发人员反映,一个测试环境数据库访问非常慢,让我帮忙分析原因。 正好刚装了 SQLBooster ,通过它来分析,顺便熟悉一下它的使用。 原因分析 获取等待事件 数据库慢的话首先看等...
      99+
      2022-10-18
    • Go库性能分析工具pprof
      目录场景pprof生成 profile 文件CPU 性能分析内存性能分析分析 profile 文件 && 优化代码go tool pproftop 命令list 命令...
      99+
      2022-12-15
      Go pprof性能分析 Go pprof
    • Android性能分析工具TraceView怎么用
      要使用TraceView进行Android性能分析,可以按照以下步骤进行操作: 在Android Studio中打开项目,并确保...
      99+
      2023-10-23
      Android
    • Linux系统下如何使用主机性能分析工具nmon
      这篇文章主要讲解了“Linux系统下如何使用主机性能分析工具nmon”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux系统下如何使用主机性能分析工具nmon”吧!nmon是收集AIX或...
      99+
      2023-06-12
    • MySQL性能分析、及调优工具使用详解
      本文汇总了MySQL DBA日常工作中用到的些工具,方便初学者,也便于自己查阅。先介绍下基础设施(CPU、IO、网络等)检查的工具:vmstat、sar(sysstat工具包)、mpstat、oprofil...
      99+
      2022-10-18
    • PHP7下安装并使用xhprof性能分析工具
      目录安装 xhprof运行报错随机应变补充该 xhprof 版本是从 https://github.com/longxinH/xhprof 获取 安装 xhprof cd xhpr...
      99+
      2022-11-12
    • Paddle模型性能分析工具Profiler怎么使用
      本篇内容介绍了“Paddle模型性能分析工具Profiler怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Paddle模型性能分析P...
      99+
      2023-07-05
    • Linux性能分析工具有哪些
      Linux性能分析工具有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章。本文也可以作为检验基础知...
      99+
      2023-06-15
    • MySQL性能分析工具之PROFILE怎么用
      小编给大家分享一下MySQL性能分析工具之PROFILE怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
      99+
      2022-10-18
    • Windows 2003自带性能监控工具的使用分析
      本篇文章为大家展示了Windows 2003自带性能监控工具的使用分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。前几天有一台备库在累积了多日的REDO后,进行REDO APPLY时,整个系统变得...
      99+
      2023-06-06
    • Java中有哪些性能分析工具
      今天就跟大家聊聊有关Java中有哪些性能分析工具,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。VisualVMVisualVM是一个资源分析工具,一直从JDK 6更新到7。它默认内存...
      99+
      2023-06-17
    • go性能分析工具pprof的用途及使用详解
      目录pprof的用途利用runtime/pprof包实现cpu分析的步骤利用runtime/pprof包实现内存分析的步骤:利用net/http/pprof包进行性能分析总结&nbs...
      99+
      2023-01-06
      go性能分析工具 go 性能 go pprof 性能分析
    • 常用的Android性能分析工具有哪些
      常用的Android性能分析工具有以下几种: Android Studio Profiler:Android Studio自带的...
      99+
      2023-10-23
      Android
    • Linux各类性能分析工具用法详解
      文章目录 静态性能分析工具文件系统观测工具虚拟文件系统(VFS)分析工具磁盘管理工具进程资源占用监测系统库调用分析工具网络配置防火墙配置多路径配置进程调度系统命令操作查看硬件信息磁盘管理网络端...
      99+
      2023-09-02
      linux 运维 性能优化 自动化 监测
    • C#开发中如何使用远程调试和性能分析工具
      C#开发中如何使用远程调试和性能分析工具引言:在C#开发过程中,远程调试和性能分析工具可以帮助我们解决一些难以调试的问题和优化程序性能。本文将详细介绍如何使用远程调试工具和性能分析工具,并提供具体的代码示例。一、远程调试工具远程调试工具允许...
      99+
      2023-10-22
      性能分析工具 远程调试 C#开发
    • Kubernetes应用性能分析工具Kubectl Flame怎么用
      这期内容当中小编将会给大家带来有关Kubernetes应用性能分析工具Kubectl Flame怎么用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。什么是性能分析?性能分析是分析应用程序性能来改进代码质量...
      99+
      2023-06-15
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作