Instruments概述

本文內容來自于學習《instrument user guide

?

一、啟動方式

1. xcode:Xcode > Open Developer Tool > Instruments

2. docker

3. build時執(zhí)行instrument

?

二、使用步驟

1. 打開instruments,選擇target

2. 選擇跟蹤模板

3. 采集數據

4. 分析、檢查數據

?

三、收集數據

1. target可以選擇系統(tǒng)所有進程或者單獨app

這里需要注意的是無線連接iOS設備的方法:

1)通過USB將iOS設備連接到PC;

2)按住Option鍵,點擊target -> 選擇iOS設備,enable wireless;

3)target -> 選擇iOS設備的無線版本;

4)斷開iOS和PC的USB連接;

注意設備關機后,數據收集會停止,需要重新連接后重新收集數據。

2. 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).

3. 使用iprofile收集數據

iprofiler是一個命令行工具,不需要打開instruments就可以監(jiān)控 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

4. 將instrument工具對數據采集的影響最小化

1)降低采樣間隔可以收集更多的數據,但是高采樣率也可能會導致一些問題:每個采樣都需要處理,高采樣率消耗處理時間;采樣間隔可能不一致; 采樣數據過多會消耗內存;采樣間隔的設置:打開Record Settings inspector

2)延遲模式:一般instruments都是在app執(zhí)行的時候收集并且分析、展示數據。延遲模式下運行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 > 選擇需要符號化的可執(zhí)行文件或者framework > “select dSYM or containing folder” > 找到dSYM文件(dSYM文件默認會保存在build文件夾下)。

2. 跟蹤面板

1)在某一個時間點上添加標簽flag:edit -> add flag;

2)放大、縮小:放大:按住shift鍵,拖拽選擇要放大的數據;縮小:按住control鍵,拖拽選擇要縮小的數據;

3)查看特定時間段內的數據:選擇起點/終點 -> view -> set inspection range start/end

4)隔離觀察一段數據:按住option鍵,選擇一段數據,detail panel中顯示這段時間內的詳細信息。

3. 詳細信息面板

不同的instruments,詳細面板中顯示不同的信息。

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

2)顯示代碼;

3)隱藏/顯示系統(tǒng)調用堆棧;

?

五、保存、導出

1. 保存單個跟蹤文檔;

2. 保存instruments跟蹤模板;

3. 導出跟蹤數據,導出格式為CSV文件(注意:不是所有的instruments都支持導出為csv文件);

4. 導入數據:使用命令行工具采樣數據之后,可以導入到instruments中進行查看;

5. 自定義的instruments可以導出為腳本,然后用dtrace命令行工具執(zhí)行該腳本。采樣數據之后,可以導入到instruments進行查看。

?

六、定位內存問題

1. 使用activity monitor檢查內存使用情況

activity monitor跟蹤cpu、內存、網絡,可以跟蹤所有進程或者單個進程。它有一系列的系統(tǒng)統(tǒng)計信息可供選擇: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

2. 內存不合理運用

Abandoned Memory,也就是存在已分配內存的引用,但實際上程序中不會使用。檢測方法是重復進行一些操作heap不會持續(xù)增長。每次重復這些操作后,點擊mark Generations button,會設置一個flag,然后查看每個迭代的詳細數據。

3. 內存泄漏

內存泄露即內存被分配了,但程序中已經沒有指向該內存的指針,導致該內存無法被釋放。使用leak instruments檢測。倘若對象發(fā)生內存泄露,detail panel中會看到對象的retain release歷史記錄。倘若是非對象發(fā)生內存泄露,會看到malloc和free的調用歷史

4. Zombies

Zombie 問題即因程序員在代碼中引用了“Zombie 對象”而導致應用程序崩潰。所謂 Zombie 對象,即已經deallocated 的對象,這些對象的 retainCount 都已經為 0,通過正常的手段我們無法在 debug 中跟蹤和觀察它們。zombies instruments可以用來跟蹤這類問題。注意zombies instrumens使用debug模式,并且將環(huán)境變量NSZombieEnabled設為true。

?

七、檢測I/O活動

1. 網絡使用

activity monitor instruments可以跟蹤網絡,網絡相關的統(tǒng)計信息有: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

2. 網絡連接

檢測iOS app如何使用TCP/IP 和 UDP/IP。與connections instruments一起使用,可以檢測app發(fā)送和接收的包數目。

八、圖像性能檢測

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模式(在開發(fā)手機設備中,設置->開發(fā)者選項,該設置重啟設備后會消失)。注意如果設備電量低、關機了,log數據會丟失。數據收集結束后, 將log數據傳到PC上,使用energy diagnostics instruments分析該數據。

3. 線程使用Multicore Trace Template

分析多核性能,比如線程狀態(tài)、調度隊列、塊使用情況。Multicore Trace Template包含thread states和dispatch instruments。

4. Time Profiler Trace Template檢測內核使用情況

?

十、UI automation

這一部分大家應該用的比較多,這里放一張UI元素的層次結構圖。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 版本記錄 前言 我們在做app的時候,不是做完功能就結束了,很多時候是需要進行檢查和優(yōu)化的,而xcode自帶了一個...
    刀客傳奇閱讀 3,115評論 0 1
  • 概述 當代的互聯網的服務,通常都是用復雜的、大規(guī)模分布式集群來實現的。互聯網應用構建在不同的軟件模塊集上,這些軟件...
    咖灰閱讀 5,975評論 0 16
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現,斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • 先來一發(fā)蘋果官網上Instruments User Guide,其實沒啥用,英語不好的也懶得去看。(反正我是看不懂...
    和玨貓閱讀 30,481評論 51 376
  • 更新于:20170814更新于:20171222再次更新于:20180823 最近的幾天在看一些 Instrume...
    甘哲157閱讀 55,311評論 39 315

友情鏈接更多精彩內容