性能分析工具
騰訊PerfDog
支持Android/iOS移動平臺,提供PerfDog軟件Windows&Mac版本。Android設備無需ROOT, iOS設備無需越獄,簡單易用。
可幫助我們輕鬆獲得 FPS、Jank、FTime、CPU、GPU、Memory、Battery 、Network、CTemp等性能參數。
包大小
APP的安裝包占用體積過大,可能會造成部分用戶的流失,主要原因:
- App Store限制使用蜂窩網絡下載超過200MB的APP
- 低端機磁盤空間小,無法安裝過多APP,對APP佔用空間數量比較敏感
- 低端機運行內存少,APP運行過程中佔用內存過多,會導致APP處於前臺或者後臺時被系統殺掉,造成APP閃退
設置輸出Link Map文件:Xcode – Build Settings – Write Link Map File爲YES
編譯後可在如下位置找到該文件。
$(TARGET_TEMP_DIR)/$(PRODUCT_NAME)-LinkMap-$(CURRENT_VARIANT)-$(CURRENT_ARCH).txt
下載Link Map分析工具:
git clone https://github.com/huanxsd/LinkMap
選擇分組分析,可得到不同組件庫佔用的存儲大小。
內存泄漏
Analyze
XCode – Debug – Analyze:(靜態內存泄漏檢測)
Leaks
Instruments – Leaks:(動態內存泄露檢測)
-
Leak by Backtrace:
可以查看內存泄漏發生的對象、內存佔用大小、責任所在庫、責任所在方法堆棧,還支持搜索上述這些關鍵字。 -
Call Tree:
勾選Invert Call Tree和Hide System Libraries,可以更清晰地看到自己編寫的代碼中的問題。 -
Leak Cycles:
選擇泄漏的對象,可以查看循環引用情況。
CPU、內存佔用
iOS系統對APP進程性能參數做嚴格限制,超過限制則會引發OOM被系統kill,因此控制APP內存佔用很有必要。
Memory 是統計FootPrint,注:OOM與FootPrint有關,與系統、機型無關。只與RAM有關,如1G內存機器。
- Xcode Memory (XCode Debug gauges統計方式即XCode Memory)
- Real Memory(Xcode Instrument統計方式即Real Memory,實際佔用物理內存。注:物理內存系統策略有關,衡量內存指標時不會關注,但是它有助於分析定位整體性能問題。比如:footprint沒有降低,說明應用沒有釋放內存,但是real memory卻降低了,說明系統對內存做了壓縮。由於壓縮會佔用CPU資源,同時相應會導致FPS降低)
- Virtual Memory(虛擬內存)
iPhone、iPad各機型發生閃退的內存閾值,總內存及其佔比(iOS APP最大內存閾值參考地址):
Device | Crash Amount | Total Amount | Percentage of Total |
---|---|---|---|
iPad1 | 127MB | 256MB | 49% |
iPad2 | 275MB | 512MB | 53% |
iPad3 | 645MB | 1024MB | 62% |
iPad4 | 585MB | 1024MB | 57% (iOS 8.1) |
iPad Mini 1st Generation | 297MB | 512MB | 58% |
iPad Mini retina | 696MB | 1024MB | 68% (iOS 7.1) |
iPad Air | 697MB | 1024MB | 68% |
iPad Air 2 | 1383MB | 2048MB | 68% (iOS 10.2.1) |
iPad Pro 9.7" | 1395MB | 1971MB | 71% (iOS 10.0.2 (14A456)) |
iPad Pro 10.5” | 3057 | 4000 | 76% (iOS 11 beta4) |
iPad Pro 12.9” (2015) | 3058 | 3999 | 76% (iOS 11.2.1) |
iPad Pro 12.9” (2017) | 3057 | 3974 | 77% (iOS 11 beta4) |
iPad Pro 11.0” (2018) | 2858 | 3769 | 76% (iOS 12.1) |
iPad Pro 12.9” (2018, 1TB) | 4598 | 5650 | 81% (iOS 12.1) |
iPad 10.2 | 1844 | 2998 | 62% (iOS 13.2.3) |
iPod touch 4th gen | 130MB | 256MB | 51% (iOS 6.1.1) |
iPod touch 5th gen | 286MB | 512MB | 56% (iOS 7.0) |
iPhone4 | 325MB | 512MB | 63% |
iPhone4s | 286MB | 512MB | 56% |
iPhone5 | 645MB | 1024MB | 62% |
iPhone5s | 646MB | 1024MB | 63% |
iPhone6 | 645MB | 1024MB | 62% (iOS 8.x) |
iPhone6+ | 645MB | 1024MB | 62% (iOS 8.x) |
iPhone6s | 1396MB | 2048MB | 68% (iOS 9.2) |
iPhone6s+ | 1392MB | 2048MB | 68% (iOS 10.2.1) |
iPhoneSE | 1395MB | 2048MB | 69% (iOS 9.3) |
iPhone7 | 1395 | 2048MB | 68% (iOS 10.2) |
iPhone7+ | 2040MB | 3072MB | 66% (iOS 10.2.1) |
iPhone8 | 1364 | 1990MB | 70% (iOS 12.1) |
iPhone X | 1392 | 2785 | 50% (iOS 11.2.1) |
iPhone XS | 2040 | 3754 | 54% (iOS 12.1) |
iPhone XS Max | 2039 | 3735 | 55% (iOS 12.1) |
iPhone XR | 1792 | 2813 | 63% (iOS 12.1) |
iPhone 11 | 2068 | 3844 | 54% (iOS 13.1.3) |
iPhone 11 Pro Max | 2067 | 3740 | 55% (iOS 13.2.3) |
Instruments – Activity Monitor
搜索過濾進程名稱,選擇Matches Any。通過Add Tag來標記對應的時間段,Live Processes結果中可以看到對應的Process Name和Momory。
Instruments – Time Profiler
檢測分析代碼的執行時間
Instruments – App Launch
分析APP啓動指定時間內的代碼執行情況