1. 移動(dòng)端性能監(jiān)測(cè)的主要途徑
移動(dòng)端性能監(jiān)測(cè)的主要途徑有三種:一是開發(fā)工具自帶的監(jiān)測(cè)工具,例如xcode自帶的instrument,Android studio自帶的Android monitor;二是使用第三方SDK;三是自行開發(fā)檢測(cè)代碼。三種途徑各有利弊。
開發(fā)工具自帶的監(jiān)測(cè)工具,包含了很多強(qiáng)大的監(jiān)測(cè)功能,且持續(xù)迭代更新,使用方便,為開發(fā)階段的性能測(cè)試提供強(qiáng)有力的支持。但是只能在開發(fā)工具內(nèi)部使用,不能獨(dú)立使用在其他產(chǎn)品周期內(nèi)。
專門用于性能監(jiān)測(cè)和用戶行為、屬性分析的第三方SDK,比如Bugly,OneAPM,聽云,F(xiàn)irebase,把它們接入項(xiàng)目可以進(jìn)行性能監(jiān)測(cè),這些第三方的工具工作原理都是類似的:引入SDK和相關(guān)庫(kù),在程序入口處啟動(dòng)監(jiān)測(cè),在關(guān)鍵函數(shù)之前和之后自動(dòng)埋點(diǎn)記錄上報(bào)。然而使用第三方SDK的缺點(diǎn)也是非常明顯的,首先是可定制性差,我們需要的一些指標(biāo)無法收集,SDK收集的我們又不完全需要,很有可能為了簡(jiǎn)單的幾個(gè)值,讓安裝包增大許多。除性能指標(biāo)外,SDK是否統(tǒng)計(jì)了其他數(shù)據(jù),我們并不完全知道,涉及到安全性問題。
自行在項(xiàng)目中植入監(jiān)測(cè)代碼的優(yōu)勢(shì)就是安全可靠,并且可定制化指標(biāo),有針對(duì)性。缺點(diǎn)就是需要開發(fā)成本,而且在代碼中監(jiān)測(cè)App的性能本身可能也會(huì)帶來額外的性能損耗。
2. 移動(dòng)端核心性能指標(biāo)
App的性能問題包括崩潰、網(wǎng)絡(luò)請(qǐng)求錯(cuò)誤或超時(shí)、響應(yīng)速度慢、列表滾動(dòng)卡頓、流量大、耗電等。而導(dǎo)致App性能低下的原因有很多,除去設(shè)備硬件和軟件的外部因素,其中大部分是開發(fā)者錯(cuò)誤地使用線程、鎖、系統(tǒng)函數(shù)、編程范式、數(shù)據(jù)結(jié)構(gòu)等導(dǎo)致的。即便是最有經(jīng)驗(yàn)的程序員,也很難在開發(fā)時(shí)就能避免所有導(dǎo)致性能低下的"坑",因此解決性能問題的關(guān)鍵是在于能不能盡早地發(fā)現(xiàn)和定位這些"坑"。
衡量一個(gè)App的性能有很多方面的指標(biāo),不同App的特征會(huì)有不同的側(cè)重指標(biāo)。其中,核心的性能檢測(cè)指標(biāo)(普遍會(huì)監(jiān)測(cè)的指標(biāo))有:
- 內(nèi)存占用量(MEM)
- CPU使用率(CPU)
- 頁(yè)面刷新幀率(FPS)
- 網(wǎng)絡(luò)狀況(Net)
- 流量消耗(Flow)
- 卡頓(Flag)
- 崩潰(Crash)
- 啟動(dòng)時(shí)間
3. 不同迭代周期對(duì)移動(dòng)端性能測(cè)試的需求
一個(gè)App的迭代生命周期,可大體分為開發(fā)期、測(cè)試期、線上期。
- 開發(fā)時(shí)期,需要能夠檢查性能異常點(diǎn)并通知給開發(fā)者;
- 測(cè)試時(shí)期,需要使用測(cè)試工具產(chǎn)生性能測(cè)試報(bào)告;
- 上線時(shí)期,通過監(jiān)控平臺(tái)上報(bào)性能數(shù)據(jù),實(shí)現(xiàn)線上問題定位和追查。
不同的迭代周期對(duì)于測(cè)試工具具有不同需求:
- 開發(fā)和測(cè)試階段:直觀看到性能測(cè)試的結(jié)果,一個(gè)可以全面檢測(cè)App性能指標(biāo)的本地監(jiān)測(cè)工具就可以滿足需求。
- 上線階段:我們對(duì)于用戶使用的應(yīng)用無法做到像針對(duì)測(cè)試階段的應(yīng)用的可控程度,所以需要通過引入性能監(jiān)測(cè)SDK的方式,在運(yùn)行階段將運(yùn)行在用戶設(shè)備中的應(yīng)用性能指標(biāo)上傳至監(jiān)控平臺(tái),便于監(jiān)測(cè)應(yīng)用線上的性能表現(xiàn)并定位問題。
4. 主流移動(dòng)端性能測(cè)試工具簡(jiǎn)述
(1) Xcode-Instrument
Instrument是Apple官方提供的一個(gè)強(qiáng)大的內(nèi)置在xcode中的性能調(diào)試工具集。其中,Activity Monitor(活動(dòng)監(jiān)視器):監(jiān)控進(jìn)程級(jí)別的CPU,內(nèi)存,磁盤,網(wǎng)絡(luò)使用情況,可以得到應(yīng)用程序在手機(jī)運(yùn)行時(shí)總占用的內(nèi)存大小;Core Animation(圖形性能):這個(gè)模塊顯示程序顯卡性能、CPU使用情況以及頁(yè)面刷新幀率;Network:用鏈接工具分析程序如何使用TCP/IP和UDP/IP鏈接;Energy Log:耗電量監(jiān)控。Instrument主要用于在調(diào)試過程中隨時(shí)發(fā)現(xiàn)問題,及時(shí)優(yōu)化,但是這個(gè)工具只能供有應(yīng)用源碼的程序員使用,無法測(cè)量用戶真實(shí)使用場(chǎng)景下的性能。
(2) Android monitor
Android Studio內(nèi)置了四種性能監(jiān)測(cè)工具M(jìn)emory Monitor、Network Monitor、CPU Monitor、GPU Monitor,可以使用這些工具監(jiān)測(cè)App的狀態(tài)。Memory Monitor工具主要是用來監(jiān)測(cè)App的內(nèi)存分配情況,判斷是否存在內(nèi)存泄漏;Network Monitor是用于顯示App網(wǎng)絡(luò)請(qǐng)求的狀態(tài);GPU Monitor工具可以將進(jìn)行UI渲染工作所花的時(shí)間表現(xiàn)出來;CPU Monitor可以對(duì)代碼中的方法進(jìn)行檢測(cè)。
(3) Matrix
Matrix是一款微信研發(fā)并日常使用的應(yīng)用性能接入框架,支持iOS, macOS和Android。 Matrix 通過接入各種性能監(jiān)控方案,對(duì)性能監(jiān)控項(xiàng)的異常數(shù)據(jù)進(jìn)行采集和分析,輸出相應(yīng)的問題分析、定位與優(yōu)化建議,從而幫助開發(fā)者開發(fā)出更高質(zhì)量的應(yīng)用。數(shù)據(jù)監(jiān)測(cè)結(jié)果存儲(chǔ)到后臺(tái),沒有直觀的展示界面。Matrix-iOS/
macOS主要監(jiān)控崩潰、卡頓和爆內(nèi)存。Matrix-android監(jiān)控范圍包括:應(yīng)用安裝包大小,幀率變化,啟動(dòng)耗時(shí),卡頓,慢方法,SQLite 操作優(yōu)化,文件讀寫,內(nèi)存泄漏等。
(4) GT
GT(隨身調(diào))是直接運(yùn)行在手機(jī)上的"集成調(diào)測(cè)環(huán)境"。利用GT,僅憑一部手機(jī),無需連接電腦,即可對(duì)App進(jìn)行快速的性能測(cè)試(CPU、內(nèi)存、流量、電量、幀率/流暢度等)、開發(fā)日志的查看、Crash日志查看、網(wǎng)絡(luò)數(shù)據(jù)包的抓取、App內(nèi)部參數(shù)的調(diào)試、真機(jī)代碼耗時(shí)統(tǒng)計(jì)等。
GT支持iOS和Android兩個(gè)手機(jī)平臺(tái),其中:
- iOS版是一個(gè)Framework包,必須嵌入App工程,編譯出帶GT的App才能使用;iPhone和iPad應(yīng)用都能支持。
- Android版由一個(gè)可直接安裝的GT控制臺(tái)App和GT SDK組成。GT控制臺(tái)可以獨(dú)立安裝使用;SDK需嵌入被調(diào)測(cè)的應(yīng)用、并利用GT控制臺(tái)進(jìn)行信息展示和參數(shù)修改。
(5) Emmagee
Emmagee是一款實(shí)用、方便的性能測(cè)試工具,適用于指定的Android App,它可以監(jiān)控CPU、內(nèi)存、網(wǎng)絡(luò)流量、電池電流和狀態(tài)(某些設(shè)備不受支持)。此外,它還支持自定義收集數(shù)據(jù)的時(shí)間間隔,在浮動(dòng)窗口中呈現(xiàn)實(shí)時(shí)進(jìn)程狀態(tài)等。
安裝之后,打開Emmagee會(huì)顯示出目前系統(tǒng)已經(jīng)安裝的應(yīng)用(可在設(shè)置中配置間隔)。選擇一個(gè)應(yīng)用之后,點(diǎn)擊"開始測(cè)試"按鈕,Emmagee會(huì)自動(dòng)啟動(dòng)被測(cè)應(yīng)用,并在最上方顯示流量、CPU、內(nèi)存等數(shù)據(jù),在該狀態(tài)下可任意使用被測(cè)應(yīng)用,Emmagee會(huì)自動(dòng)進(jìn)行相關(guān)數(shù)據(jù)的記錄,終止測(cè)試之后會(huì)生成相應(yīng)的報(bào)告,并保存在Android目錄中。
(6) Soloπ
Soloπ是支付寶在移動(dòng)端上實(shí)現(xiàn)的一套無線化、非侵入、免Root的 Android 專項(xiàng)測(cè)試方案。直接操控手機(jī),即可實(shí)現(xiàn)自動(dòng)化的功能、性能、兼容性、以及穩(wěn)定性測(cè)試等工作。支持 CPU、內(nèi)存、FPS、流量等常規(guī)指標(biāo)的實(shí)時(shí)獲取,同時(shí)支持將性能數(shù)據(jù)記錄下來,存儲(chǔ)到本地并通過報(bào)表形式展示,支持性能加壓。
(7) Testin
Testin性能測(cè)試,通過自動(dòng)化的測(cè)試工具,在上線前模擬正常、峰值以及異常等多種場(chǎng)景,從而對(duì)App的各項(xiàng)性能指標(biāo)進(jìn)行測(cè)試。包括:負(fù)載測(cè)試、壓力測(cè)試、配置測(cè)試、并發(fā)測(cè)試、容量測(cè)試、可靠性測(cè)試。
- 負(fù)載測(cè)試:通過逐步增加系統(tǒng)負(fù)載,測(cè)試系統(tǒng)性能的變化,并最終確定在滿足性能指標(biāo)的情況下,系統(tǒng)所能承受的最大負(fù)載量。
- 壓力測(cè)試:通過逐步增加系統(tǒng)負(fù)載,測(cè)試系統(tǒng)性能的變化,并最終確定在什么負(fù)載條件下系統(tǒng)性能處于失效狀態(tài),并以此來獲得系統(tǒng)能夠提供的最大服務(wù)級(jí)別。
- 配置測(cè)試:通過測(cè)試被測(cè)試軟件的軟硬件配置,獲得不同配置的性能指標(biāo),用于選擇最佳的設(shè)備及參數(shù)配置。
- 并發(fā)測(cè)試:測(cè)試多個(gè)用戶同時(shí)訪問同一個(gè)應(yīng)用、同一個(gè)模塊或者數(shù)據(jù)記錄時(shí)是否存在死鎖或者其他性能問題。
- 容量測(cè)試:在確定的軟、硬件條件下,構(gòu)造一定數(shù)量的虛擬用戶訪問,從而獲取不同數(shù)量級(jí)別的服務(wù)器性能指標(biāo),以確定數(shù)據(jù)庫(kù)能夠處理的最大會(huì)話能力、最大容量等。
- 可靠性測(cè)試:采用系統(tǒng)能夠支持的最大并發(fā)用戶數(shù),持續(xù)執(zhí)行一段時(shí)間(7*24小時(shí)),通過綜合分析執(zhí)行指標(biāo)、資源監(jiān)控指標(biāo),來確定系統(tǒng)處理最大工作量的性能情況。
(8) Bugly
Bugly是騰訊推出的一款免費(fèi)的崩潰收集工具。面向移動(dòng)開發(fā)者提供專業(yè)的 Crash 監(jiān)控、崩潰分析等質(zhì)量跟蹤服務(wù)。移動(dòng)開發(fā)者 ( Android / iOS ) 可以通過監(jiān)控,快速發(fā)現(xiàn)用戶在使用過程中出現(xiàn)的 Crash (崩潰)、Android ANR( application not response) 和 iOS 卡頓,并根據(jù)上報(bào)的信息快速定位和解決問題。用戶只要登陸 Bugly 網(wǎng)站,就可以清晰的看到被監(jiān)測(cè)產(chǎn)品有多少 Crash,影響了多少用戶的使用,并可以根據(jù) Bugly 提供的 Crash 日志進(jìn)行問題修復(fù)。
(9) OneAPM
Mi是OneAPM針對(duì)移動(dòng)設(shè)備上App推出的移動(dòng)應(yīng)用性能監(jiān)控工具。Mi展示移動(dòng)應(yīng)用的交互性能,崩潰率,HTTP 錯(cuò)誤率,網(wǎng)絡(luò)錯(cuò)誤率等核心性能指標(biāo)、用戶訪問軌跡、用戶動(dòng)作等行為數(shù)據(jù),以及活躍用戶等運(yùn)營(yíng)數(shù)據(jù)。從用戶動(dòng)作、網(wǎng)絡(luò)請(qǐng)求、崩潰三個(gè)核心指標(biāo)對(duì)用戶體驗(yàn)進(jìn)行評(píng)估,并結(jié)合應(yīng)用版本、操作系統(tǒng)、設(shè)備、地域等多個(gè)維度總覽用戶分布情況。完整記錄每個(gè)用戶的訪問軌跡,通過查看單次用戶訪問,回溯過程中出現(xiàn)的緩慢動(dòng)作,錯(cuò)誤請(qǐng)求和崩潰。詳盡展示某類崩潰影響的設(shè)備、操作系統(tǒng)、應(yīng)用版本、發(fā)生次數(shù)、影響用戶等信息,還原崩潰發(fā)生軌跡,定位崩潰代碼行。
(10) 聽云App
聽云App是聽云平臺(tái)提供的移動(dòng)端性能監(jiān)測(cè)工具。監(jiān)控真實(shí)用戶使用過程中的崩潰、錯(cuò)誤、卡頓、網(wǎng)絡(luò)性能差等問題。可以跟蹤App應(yīng)用移動(dòng)設(shè)備端用戶進(jìn)行屏幕操作時(shí)的交互性能;統(tǒng)計(jì)多種錯(cuò)誤類型,直觀定位到具體報(bào)錯(cuò)URL、以及崩潰時(shí)的堆棧信息;可以深入追蹤HTTP錯(cuò)誤、網(wǎng)絡(luò)錯(cuò)誤和崩潰的原因,提高App質(zhì)量。
5. 主流移動(dòng)端性能測(cè)試工具橫向?qū)Ρ?/strong>
針對(duì)不同的產(chǎn)品迭代周期,選取了目前業(yè)內(nèi)比較成熟的工具,對(duì)比各自的優(yōu)缺點(diǎn)。



各工具性能指標(biāo)覆蓋情況對(duì)比如下表:

6. 結(jié)論
不同的移動(dòng)端性能測(cè)試工具各有優(yōu)劣勢(shì),在工具選擇上,需要綜合考慮主要監(jiān)測(cè)的性能指標(biāo)和工具的特長(zhǎng)。對(duì)于研發(fā)測(cè)試階段適用的工具,GT、Emmagee、soloπ在andriod端可直接安裝apk進(jìn)行測(cè)試,方便快捷。對(duì)于線上用戶使用情況的監(jiān)控,有些工具指標(biāo)覆蓋比較全面,但是對(duì)某些指標(biāo)的監(jiān)測(cè)不夠深入,可考慮疊加另外一個(gè)或多個(gè)工具進(jìn)行組合使用。
原文地址:https://www.toutiao.com/a6805108031467029004/