一 instrument自帶模板
- Blank
創(chuàng)建一個空的模板,你可以自定義的添加各種工具摧莽。 - Activity Monitor
可以只用這個模板,研究系統(tǒng)工作負載和虛擬內(nèi)存大小的關系 - Allocations
將Allocations和VM跟蹤器加到跟蹤文檔中五慈,使用該工具可以監(jiān)視內(nèi)存和對象的內(nèi)存分配方式和情況己肮。 - CocoaLayout
是一種Cocoa布局工具 ,可以應用于iOS模擬器和Cocoa桌面應用茎刚,但是不能和連接的iOS設備一起使用襟锐。觀察NSLayoutConstraint對象的改變,幫助我們判斷什么時間什么地點的constraint是否合理 - Core Animation
將CoreAnimation加入到跟蹤文檔中膛锭,可以測量ios設備上每秒的CoreAnimation幀數(shù)粮坞,這可以幫助你理解內(nèi)容是如何渲染到屏幕上的笛质,(圖形性能)這個模塊顯示程序顯卡性能以及CPU使用情況。 - CoreData
將CoreData數(shù)據(jù)提取捞蚂、緩存缺失和存儲加入到跟蹤文檔中,使用這個工具可以檢測應用程序中數(shù)據(jù)的存儲交互跷究。 - Counters
收集使用時間或基于事件的抽樣方法的性能監(jiān)控計數(shù)器(PMC)事件姓迅。 - Energy Log
耗電量監(jiān)控,將Energy Diagnostics, CPU Activity, Display Brightness, Sleep/Wake, Bluetooth, WiFi, and GPS instruments加入到跟蹤文檔中進行檢測俊马。 - File Activity
將File Activity, Reads/Writes, File Attributes, and Directory I/O instruments 加入到跟蹤文檔中丁存,只用這個模板可以讓你檢查系統(tǒng)文件的使用情況,可以檢查文件的打開柴我、關閉解寝、讀和寫操作,同時也可以檢測文件系統(tǒng)本身的改變艘儒,包括權(quán)限和所有權(quán)發(fā)生的改變聋伦。 - Leaks
將the Allocations and Leaks instruments加入到模板中,使用這個模板可以幫助你檢測內(nèi)存的泄漏界睁。 - Metal System Trace
它是是apple 2014年在ios平臺上推出的高效底層的3D圖形API觉增,它通過減少驅(qū)動層的API調(diào)用CPU的消耗提高渲染效率。 - Network
用鏈接工具分析你的程序如何使用TCP/IP和UDP/IP鏈接翻斟。 - OpenGL ES Analysis
將OpenGL ES Analyzer and OpenGL ES Driver加入到模板中逾礁,這個模塊測量分析OpenGL ES活動正確性檢測以及表現(xiàn)問題,提供解決建議访惜。 - System Trace
系統(tǒng)跟蹤嘹履,通過顯示當前被調(diào)度線程提供綜合的系統(tǒng)表現(xiàn),顯示從用戶到系統(tǒng)的轉(zhuǎn)換代碼通過兩個系統(tǒng)調(diào)用或內(nèi)存操作债热。 - System Usage
這個模板記錄關于文件讀寫砾嫉,sockets,I/O系統(tǒng)活動阳柔, 輸入輸出焰枢。 - Time Profile
執(zhí)行對系統(tǒng)的CPU上運行的進程低負載時間為基礎采樣。 - Zombies
測量一般的內(nèi)存使用舌剂,專注于檢測過度釋放的野指針對象济锄,也提供對象分配統(tǒng)計,以及主動分配的內(nèi)存地址歷史霍转。
二 Activity Monitor界面介紹
1. Summary與Parent Child類似
- process id :進程id
- process name :進程名
- user name:用戶名
- %CPU:cpu占比
- threads:線程
- real mem:真正使用的內(nèi)存
- virtual mem:虛擬內(nèi)存
- architecture:架構(gòu)
- cpu time:CPU時間
- sudden term:驟減項
2. Samples
- total thread:總線程
- physical memory wired:物理內(nèi)存連接大小
- physical memory active:活動的物理內(nèi)存大小
- physical memory Inactive:不活動的物理內(nèi)存大小
- physical memory used:使用的物理內(nèi)存大小
三 Allocations
1. 內(nèi)存分類
1.Leaked memory: Memory unreferenced by your application that cannot be used again or freed (also detectable by using the Leaks instrument).
2.Abandoned memory: Memory still referenced by your application that has no useful purpose.
3.Cached memory: Memory still referenced by your application that might be used again for better performance.
- 其中 Leaked memory和 Abandoned memory 都屬于應該釋放而沒釋放的內(nèi)存荐绝,都是內(nèi)存泄露
- 在 ARC 時代更常見的內(nèi)存泄露是循環(huán)引用導致的Abandoned memory,Leaks 工具查不出這類內(nèi)存泄露,需要借助Allocations
2. 界面介紹
- Persistent Bytes:持久分配的內(nèi)存所占字節(jié)數(shù)(未釋放)即該類對象在內(nèi)存中占得總內(nèi)存
- Persistent:持久創(chuàng)建的對象個數(shù)(未釋放)即該對象存在于內(nèi)存中的個數(shù)
- Transient:臨時分配的對象個數(shù)(未釋放)即存在過已經(jīng)被回收的對象的個數(shù)
- Total Bytes:分配的所有內(nèi)存所占字節(jié)數(shù)(未釋放)
- Total:創(chuàng)建的對象總數(shù)(未釋放)
3. 了解每個方法所占用的內(nèi)存情況
- Details選擇Call Trees
- Allocations Lifespan選擇All Allocations
- Allocations Type選擇All Heap&Anonymous VM
-
Call Tree勾選Hide System Libraries
四 ?Leaks
-
首先打開Leaked避消,跑起工程來低滩,點擊要測試的頁面召夹,如果有內(nèi)存泄漏,會出現(xiàn)下圖中的紅色的x
2.定位leak泄露的地方
- Detail選擇Call Tree模式
- 底部的Call Tree模式勾選Hide System Libraries
-
在中間方法調(diào)用后面如果有箭頭點擊展開恕沫,直到?jīng)]有箭頭為止