systrace: 系统级跟踪工具的解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: systrace是Android4.1版本之后推出的,对系统Performance分析的工具,该工具结合Android 内核的数据,最终会生产html文件。systrace的功能包括跟踪系统的I/O操作、内核工作队列、CPU负载以及Android各个子系统的运行状况等
关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。
专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。

在这里插入图片描述

一、导读

我们继续总结学习Android 基础知识,温故知新。

二、概览

systrace是Android4.1版本之后推出的,对系统Performance分析的工具,该工具结合Android 内核的数据,最终会生产html文件。
systrace的功能包括跟踪系统的I/O操作、内核工作队列、CPU负载以及Android各个子系统的运行状况等
Systrace允许你监视和跟踪Android系统的行为(trace)。
它会告诉你系统都在哪些工作上花费时间、CPU周期都用在哪里,甚至你可以看到每个线程、进程在指定时间内都在干嘛。
它同时还会突出观测到的问题,从垃圾回收到渲染内容都可能是问题对象,甚至提供给你建议的解决方案。可以帮助开发者分析系统瓶颈,改进性能。

三、获取systrace文件

3.1 通过python命令获取

3.1.1 安装python

首先要安装python、pip、pywin32等,这些方便我们使用命令;
python
pip
安装完后进行环境变量配置;

注意: Systrace脚本不支持3.X版本,一定要2。x

3.1.2 运行命令

网站

找到我们sdk的目录,如:
/Users/xyz/Library/Android/sdk

进入目录

cd /Users/xxx/Library/Android/sdk/platform-tools/systrace

然后运行命令

python systrace.py [options] [categories]

python systrace.py [参数] [类别]

例如:

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

python systrace.py –a com.xx.xx -o mynewtrace.html sched freq idle am wm gfx view dalvik input res app
        
        
python systrace.py –b 32768 –t 5 –a com.xx.xx -o mynewtrace.html sched freq idle am wm gfx view dalvik input res app
加了个时间,这里5s自动停止

这里根据提示停止,生成的文件会在sdk目录下 .
/Users/xyz/Library/Android/sdk/platform-tools/systrace/mynewtrace.html

在这里插入图片描述

参数说明

Options
-h | --help 帮助信息
-l | --list-categories 查看已连接设备支持的类别
-o file.html 需要保存的文件名,默认trace.html
-t N | --time=N 跟踪设备的时间,没有的话则根据提示来
-b N | --buf-size=N 缓冲区的大小,
-k functions | --ktrace=functions 跟踪特定内核的函数
-a app-name | --app=app-name 检测的包名
--from-file=file-path
-e device-serial | --serial=device-serial

要查看已连接设备支持的类别列表
python systrace.py --list-categories 或者
python systrace.py –l

在这里插入图片描述

3.2 通过代码的方式

Trace.beginSection("xyz");

Trace.endSection();

这两个方法必须成对出现,而且必须在同一个线程中。

在release版本中,我们需要添加以下代码这样就可以手动开启App自定义Label的Trace功能,在非debuggable的版本中也适用

在Application的`attachBaseContext` 中添加
        
Class<?> trace = Class.forName("android.os.Trace");
Method setAppTracingAllowed = trace.getDeclaredMethod("setAppTracingAllowed", boolean.class);
setAppTracingAllowed.invoke(null, true);

3.3 使用android studio profiler

  1. 在 Android Studio 中,依次选择 View > Tool Windows > Profiler,或点击工具栏中的 Profile 图标
  2. 点击 CPU 时间轴上的任意位置以打开 CPU 性能分析器
  3. 从 CPU 性能分析器的配置菜单中选择 System Trace,然后点击 Record。完成与应用的交互后,点击 Stop

界面卡顿检测

3.4 通过收集系统设置

针对部分Android 9 以上设备,可以这样做

Android 9 以上设备

3.5 Perfetto 命令行工具(Android 10 及更高版本)

分析应用性能

四、systrace文件分析

  1. Google Chrome浏览器可以直接打开systrace,
  2. 通过chrome://tracing/,然后load systrace。

打开后是这个样子的:
在这里插入图片描述

4.0 快捷键

在这里插入图片描述
w 放大
s 缩小
a 左移
d 右移
f 放大当前选定区域
m 标记当前选定区域
v 高亮VSync
g 是否显示网格线
0 恢复trace到初始态

4.1 显示帧

这一部分通常是报告中最顶部的部分,描绘了一条多色线条,后面是成堆的条形。这些形状表示已创建的特定线程的状态和帧堆栈,如下图所示;
在这里插入图片描述
每个条形堆上方的多色线条表示特定线程随时间变化的一组状态。每段线条可以包含以下一种颜色:

绿色:正在运行
线程正在完成与某个进程相关的工作或正在响应中断。
蓝色:可运行
线程可以运行但目前未进行调度。
白色:休眠
线程没有可执行的任务,可能是因为线程在遇到互斥锁定时被阻止。
橙色:不可中断的休眠
线程在遇到 I/O 操作时被阻止或正在等待磁盘操作完成。
紫色:可中断的休眠
线程在遇到另一项内核操作(通常是内存管理)时被阻止。

4.2 Interactions

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

4.3 Kernel(CPU activity)

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

CPU 活动部分可以展开,展开后您就可以查看每个 CPU 的时钟频率。图 1 展示了一个收起后的 CPU 活动部分示例,图 2 展示了显示时钟频率的展开后版本:

在这里插入图片描述

4.4 SurfaceFlinger

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

4.5 com.xxx.xxx(PackageName)

跟包名相关的进程,一般就是主进程

4.6 其他进程

后面还有很多其他进程信息,如system_serve、processxxx等等

4.7 举例

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

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

选择运行速度慢的帧后,您可能会在报告的底部窗格中看到一条提醒。图 5 中显示的提醒指明帧的主要问题是在 ListView 回收和重新绑定上花费了太多时间。指向跟踪记录中相关事件的链接可详细说明系统在此期间执行的操作。

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

如果您发现在界面线程上执行的工作太多,请使用以下方法之一来帮助确定哪些方法占用了过多的 CPU 时间:

如果您想了解哪些方法可能会导致瓶颈,请在这些方法中添加跟踪标记。如需了解详情,请参阅有关如何在代码中定义自定义事件的指南。
如果您不确定界面瓶颈的来源,请使用 Android Studio 中提供的 CPU 分析器。您可以生成跟踪日志,然后使用 CPU 分析器导入和检查这些日志。

五、 推荐阅读

Java 专栏

[SQL 专栏]
[数据结构与算法]
[Android学习专栏]

ddd

相关文章
|
3天前
|
人工智能 搜索推荐 API
Cobalt:开源的流媒体下载工具,支持解析和下载全平台的视频、音频和图片,支持多种视频质量和格式,自动提取视频字幕
cobalt 是一款开源的流媒体下载工具,支持全平台视频、音频和图片下载,提供纯净、简洁无广告的体验
70 9
Cobalt:开源的流媒体下载工具,支持解析和下载全平台的视频、音频和图片,支持多种视频质量和格式,自动提取视频字幕
|
3天前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
46 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
2天前
|
数据可视化 项目管理
个人和团队都好用的年度复盘工具:看板与KPT方法解析
本文带你了解高效方法KPT复盘法(Keep、Problem、Try),结合看板工具,帮助你理清头绪,快速完成年度复盘。
29 7
个人和团队都好用的年度复盘工具:看板与KPT方法解析
|
6天前
|
存储 监控 算法
企业内网监控系统中基于哈希表的 C# 算法解析
在企业内网监控系统中,哈希表作为一种高效的数据结构,能够快速处理大量网络连接和用户操作记录,确保网络安全与效率。通过C#代码示例展示了如何使用哈希表存储和管理用户的登录时间、访问IP及操作行为等信息,实现快速的查找、插入和删除操作。哈希表的应用显著提升了系统的实时性和准确性,尽管存在哈希冲突等问题,但通过合理设计哈希函数和冲突解决策略,可以确保系统稳定运行,为企业提供有力的安全保障。
|
28天前
|
安全 前端开发 Android开发
探索移动应用与系统:从开发到操作系统的深度解析
在数字化时代的浪潮中,移动应用和操作系统成为了我们日常生活的重要组成部分。本文将深入探讨移动应用的开发流程、关键技术和最佳实践,同时分析移动操作系统的核心功能、架构和安全性。通过实际案例和代码示例,我们将揭示如何构建高效、安全且用户友好的移动应用,并理解不同操作系统之间的差异及其对应用开发的影响。无论你是开发者还是对移动技术感兴趣的读者,这篇文章都将为你提供宝贵的见解和知识。
|
1月前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
75 3
|
10天前
|
安全 搜索推荐 数据挖掘
陪玩系统源码开发流程解析,成品陪玩系统源码的优点
我们自主开发的多客陪玩系统源码,整合了市面上主流陪玩APP功能,支持二次开发。该系统适用于线上游戏陪玩、语音视频聊天、心理咨询等场景,提供用户注册管理、陪玩者资料库、预约匹配、实时通讯、支付结算、安全隐私保护、客户服务及数据分析等功能,打造综合性社交平台。随着互联网技术发展,陪玩系统正成为游戏爱好者的新宠,改变游戏体验并带来新的商业模式。
|
2月前
|
机器学习/深度学习 人工智能 数据处理
【AI系统】NV Switch 深度解析
英伟达的NVSwitch技术是高性能计算领域的重大突破,旨在解决多GPU系统中数据传输的瓶颈问题。通过提供比PCIe高10倍的带宽,NVLink实现了GPU间的直接数据交换,减少了延迟,提高了吞吐量。NVSwitch则进一步推动了这一技术的发展,支持更多NVLink接口,实现无阻塞的全互联GPU系统,极大提升了数据交换效率和系统灵活性,为构建强大的计算集群奠定了基础。
80 3
|
2月前
|
前端开发 Android开发 UED
移动应用与系统:从开发到优化的全面解析####
本文深入探讨了移动应用开发的全过程,从最初的构思到最终的发布,并详细阐述了移动操作系统对应用性能和用户体验的影响。通过分析当前主流移动操作系统的特性及差异,本文旨在为开发者提供一套全面的开发与优化指南,确保应用在不同平台上均能实现最佳表现。 ####
31 0
|
2月前
|
存储 自然语言处理 数据可视化
3倍提升效率:医疗病理信息抽取与关系图谱展示系统解析
该项目旨在通过NLP技术将医疗病理报告中的非结构化文本转化为结构化数据,实现信息的高效抽取、存储及可视化展示。利用Python、JavaScript等技术栈,结合Echarts等工具,构建病理信息的关系图谱,支持多条件检索与图表互动,提高医生及研究人员的工作效率。预期成果包括数据结构化、关系图谱可视化、快速检索及数据统计分析等功能。项目预计2-4周完成。

推荐镜像

更多