Instruments概述

Instruments概述本文内容来自于学习 instrumentus 一 启动方式 xcode XcodeOpenDev 时执行 instrument 二 使用步骤打开 instruments 选择 target 选择跟踪模板采集数据分析 检查数据三 收集数据 target 可以选择系统所有进程或者单独 app 这里需要注意的

本文内容来自于学习《instrument user guide》

一、启动方式

  1. xcode:Xcode > Open Developer Tool > Instruments
  2. docker
  3. build时执行instrument

二、使用步骤

  1. 打开instruments,选择target
  2. 选择跟踪模板
  3. 采集数据
  4. 分析、检查数据

三、收集数据

  1. target可以选择系统所有进程或者单独app

这里需要注意的是无线连接iOS设备的方法:

1)通过USB将iOS设备连接到PC;

2)按住Option键,点击target -> 选择iOS设备,enable wireless;

3)target -> 选择iOS设备的无线版本;

4)断开iOS和PC的USB连接;

注意设备关机后,数据收集会停止,需要重新连接后重新收集数据。

  1. Dock中开启instruments

该方法支持后台收集、采样数据,支持的instruments模板有:

1)System Time Profile.

2)Time Profile Specific Process.

3)Automatically Time Profile Spinning Applications.

4)Allow Tracing of Any Process (10 hours).

  1. 使用iprofile收集数据

iprofiler是一个命令行工具,不需要打开instruments就可以监控 app的性能,数据保存在.dtps文件中。数据收集结束之后可以导入到instruments模板中,图形化展示。支持的模板有:1)Activity Monitor. 2)Allocations. 3)Counters. 4)Event Profiler. 5)Leaks. 6)System Trace. 7)Time Profiler.

iprofiler使用样例:

1)使用time profiler和activity monitor instrument收集所有进程的数据,最终保存为allprocs.dtps.

iprofiler -timeprofiler -activitymonitor

2)使用Time Profiler instrument收集app数据,数据采集时间为8s,数据保存为/temp/YourApp_perf.dtps.

iprofiler -T 8s -d /temp -o YourApp_perf -timeprofiler -a YourApp

3)使用leaks和activity monitor采集PID=823进程的数据,采样时间为2.5s,最终保存为YourApp_perf.dtps.

iprofiler -T 2500ms -o YourApp_perf -leaks -activitymonitor -a 823

4)使用Time Profiler 和 Allocations instruments采集app数据,采集时间为默认时间(默认时间为10s),数据保存为/tmp/allprocs.dtps.

iprofiler -d /tmp -timeprofiler -allocations -a YourApp.app

5)app的地址为/path/to,参量为arg1,使用Time Profiler 和System Trace instruments采集数据,采集时间为15s,但是只保存最后2s的数据,文件保存为YourApp_perf.dtps.

iprofiler -T 15 -I 1000ms -window 2s -o YourApp_perf -timeprofiler -systemtrace /path/to/Your.app arg1

  1. 将instrument工具对数据采集的影响最小化

1)降低采样间隔可以收集更多的数据,但是高采样率也可能会导致一些问题:每个采样都需要处理,高采样率消耗处理时间;采样间隔可能不一致; 采样数据过多会消耗内存;采样间隔的设置:打开Record Settings inspector

2)延迟模式:一般instruments都是在app执行的时候收集并且分析、展示数据。延迟模式下运行instruments是指等数据收集结束之后再分析数据,这种方式可以提高性能数据的准确性。设置方法:

为整个instruments设置deferred mode:instruments -> preferences > 勾选“always use deferred mode”;

为某一个trace设置derferred mode:file -> record options -> 勾选“deferred mode”;

四、检查数据

  1. 符号化

当跟踪数据里面显示的是地址而不是可读性较强的符号,因此需要将地址转换为符号。地址和 符号的映射保存在dSYM文件中。instruments工具一般会自动找到dSYM文件,然后将地址转换为符号,如果instruments工具没有成 功找到dSYM文件,可以手动设置:files -> symbols > 选择需要符号化的可执行文件或者framework > “select dSYM or containing folder” > 找到dSYM文件(dSYM文件默认会保存在build文件夹下)。

  1. 跟踪面板

1)在某一个时间点上添加标签flag:edit -> add flag;

2)放大、缩小:放大:按住shift键,拖拽选择要放大的数据;缩小:按住control键,拖拽选择要缩小的数据;

3)查看特定时间段内的数据:选择起点/终点 -> view -> set inspection range start/end

4)隔离观察一段数据:按住option键,选择一段数据,detail panel中显示这段时间内的详细信息。

  1. 详细信息面板

不同的instruments,详细面板中显示不同的信息。

1)extend detail inspector: view -> inspectors > show extend detail;

2)显示代码;

3)隐藏/显示系统调用堆栈;

五、保存、导出

  1. 保存单个跟踪文档;
  2. 保存instruments跟踪模板;
  3. 导出跟踪数据,导出格式为CSV文件(注意:不是所有的instruments都支持导出为csv文件);
  4. 导入数据:使用命令行工具采样数据之后,可以导入到instruments中进行查看;
  5. 自定义的instruments可以导出为脚本,然后用dtrace命令行工具执行该脚本。采样数据之后,可以导入到instruments进行查看。

六、定位内存问题

  1. 使用activity monitor检查内存使用情况

activity monitor跟踪cpu、内存、网络,可以跟踪所有进程或者单个进程。它有一系列的系统统计信息可供选择:Physical Memory Wired,Physical Memory Active,Physical Memory Inactive,Physical Memory Used,Physical Memory Free,Total VM Size,VM Page In Bytes,VM Page Out Bytes,VM Swap Used

  1. 内存不合理运用

Abandoned Memory,也就是存在已分配内存的引用,但实际上程序中不会使用。检测方法是重复进行一些操作heap不会持续增长。每次重复这些操作后,点击mark Generations button,会设置一个flag,然后查看每个迭代的详细数据。

  1. 内存泄漏

内存泄露即内存被分配了,但程序中已经没有指向该内存的指针,导致该内存无法被释放。使用leak instruments检测。倘若对象发生内存泄露,detail panel中会看到对象的retain release历史记录。倘若是非对象发生内存泄露,会看到malloc和free的调用历史

  1. Zombies

Zombie 问题即因程序员在代码中引用了“Zombie 对象”而导致应用程序崩溃。所谓 Zombie 对象,即已经deallocated 的对象,这些对象的 retainCount 都已经为 0,通过正常的手段我们无法在 debug 中跟踪和观察它们。zombies instruments可以用来跟踪这类问题。注意zombies instrumens使用debug模式,并且将环境变量NSZombieEnabled设为true。

七、检测I/O活动

  1. 网络使用

activity monitor instruments可以跟踪网络,网络相关的统计信息有:1)Net Packets In;2)Net Bytes In;3)Net Packets Out;4)Net Bytes Out;5)Net Packets In Per Second;6)Net Packets Out Per Second;7)Net Bytes In Per Second;8)Net Bytes Out Per Second

  1. 网络连接

检测iOS app如何使用TCP/IP 和 UDP/IP。与connections instruments一起使用,可以检测app发送和接收的包数目。

八、图像性能检测

  1. core animation graphics:用来检测帧频率
  2. OpenGL activity
  3. GPU Driver

九、CPU使用

  1. Performance Monitor Counters
  2. 电量:Energy Diagnostics Trace Template

跟踪电量、CPU、网络、显示亮度、睡眠/唤醒、蓝牙、wifi、GPS。

可以全天开启 Energy Diagnostics Log模式(在开发手机设备中,设置->开发者选项,该设置重启设备后会消失)。注意如果设备电量低、关机了,log数据会丢失。数据收集结束后, 将log数据传到PC上,使用energy diagnostics instruments分析该数据。

  1. 线程使用Multicore Trace Template

分析多核性能,比如线程状态、调度队列、块使用情况。Multicore Trace Template包含thread states和dispatch instruments。

  1. Time Profiler Trace Template检测内核使用情况

十、UI automation

这一部分大家应该用的比较多,这里放一张UI元素的层次结构图。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210249.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午7:59
下一篇 2026年3月19日 上午7:59


相关推荐

  • Java 生成二维码_二维码生成规则

    Java 生成二维码_二维码生成规则利用Java生成二维码生成二维码的依赖下载:点击下载代码:packagecom.shuai.test02;importcom.swetake.util.Qrcode;importjavax.imageio.ImageIO;importjava.awt.*;importjava.awt.image.BufferedImage;importjava.io.File;importjava.nio.charset.StandardCharsets;publicclas

    2025年6月23日
    2
  • word2vec 中的数学原理详解(一)目录和前言

    word2vec 中的数学原理详解(一)目录和前言word2vec是Google于2013年开源推出的一个用于获取wordvector的工具包,它简单、高效,因此引起了很多人的关注。由于word2vec的作者TomasMikolov在两篇相关的论文[3,4]中并没有谈及太多算法细节,因而在一定程度上增加了这个工具包的神秘感。一些按捺不住的人于是选择了通过解剖源代码的方式来一窥究竟,出于好奇,我也成为了他们中的一员。读完代码后,觉得收获颇多,整理成文,给有需要的朋友参考。

    2022年5月16日
    45
  • P2P学习(三)网络传输基本知识

    P2P学习(三)网络传输基本知识一:NAT(NetworkAddressTranslator)P2P技术详解(一):NAT详解——详细原理、P2P简介NAT的四种类型二:STUN(SimpleTraversalof

    2022年7月1日
    33
  • 灰度图像的自动阈值分割(Otsu 法)

    灰度图像的自动阈值分割(Otsu 法)灰度图像的自动阈值分割 Otsu 法 机器视觉领域许多算法都要求先对图像进行二值化 这种二值化操作阈值的选取非常重要 阈值选取的不合适 可能得到的结果就毫无用处 今天就来讲讲一种自动计算阈值的方法 这种方法被称之为 Otsu 法 发明人是个日本人 叫做 NobuyukiOtsu 大津展之 简单的说 这种算法假设一副图像由前景色和背景色组成 通过统计学的方法来选取一个阈值 使得这个阈值可以将前景色

    2026年3月17日
    1
  • c语言入门教程–-12作用域

    c语言入门教程–-12作用域

    2021年3月12日
    245
  • classcastingexception_c++链接错误

    classcastingexception_c++链接错误转载自:http://www.blogjava.net/Sunday/archive/2007/08/18/137860.html现在java编程中经常碰到ClassCastException错误,ClassCastException是JVM在检测到两个类型间的转换不兼容时引发的运行时异常。此类错误通常会终止用户请求。本模式试图为您提供了解和排除ClassCastExcept

    2025年10月15日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号