有贊移動(dòng)性能監(jiān)控平臺(tái)(二)
一、前言
性能和穩(wěn)定性一直是App質(zhì)量體系中最基本和最關(guān)鍵的一環(huán)。 而移動(dòng)端業(yè)務(wù)快速迭代的過(guò)程中,開(kāi)發(fā)同學(xué)對(duì)性能的關(guān)注不足,量變引起質(zhì)變,App的卡頓嚴(yán)重影響商家的日常經(jīng)營(yíng),商家對(duì)性能的吐槽和抱怨越來(lái)越嚴(yán)重。而面對(duì)商家反饋的性能問(wèn)題,由于缺乏現(xiàn)場(chǎng)信息,問(wèn)題的排查既被動(dòng)又困難。我們急需一個(gè)系統(tǒng)化的解決方案,需要有自己的APM(Application Performance Management),可以通過(guò)它來(lái)發(fā)現(xiàn)問(wèn)題,并且能依靠它的數(shù)據(jù)來(lái)指導(dǎo)我們進(jìn)行性能優(yōu)化。
二、整體設(shè)計(jì)
系統(tǒng)主要分為兩個(gè)部分:
移動(dòng)端上的「性能檢測(cè)」,主要負(fù)責(zé)數(shù)據(jù)的采集。
后端的「數(shù)據(jù)處理」,主要包含數(shù)據(jù)的清洗、解析、存儲(chǔ)、報(bào)警等。

檢測(cè)的核心在于監(jiān)聽(tīng)線(xiàn)程池的三個(gè)節(jié)點(diǎn):任務(wù)提交到線(xiàn)程池。拉取每個(gè)任務(wù)的調(diào)用棧信息,解析并記錄任務(wù)的發(fā)起點(diǎn)以及任務(wù)的提交時(shí)間。同時(shí)可以分析此時(shí)線(xiàn)程池的負(fù)載狀況(結(jié)合activeCount、corePoolSize、queueSize),如果負(fù)載達(dá)到閾值,則拉取出當(dāng)前所有的任務(wù),分析是否存在明顯有問(wèn)題的任務(wù)(比如同一任務(wù)發(fā)起多次等)。
任務(wù)開(kāi)始執(zhí)行。記錄任務(wù)開(kāi)始執(zhí)行的時(shí)間。
任務(wù)執(zhí)行完成。與任務(wù)開(kāi)始時(shí)間做差值,計(jì)算并記錄任務(wù)的執(zhí)行時(shí)間,如果任務(wù)的執(zhí)行時(shí)間超出閾值,則會(huì)進(jìn)行上報(bào)。
通過(guò)上面的方式能逐步分離出「耗時(shí)長(zhǎng)」、「頻率高」的任務(wù),通過(guò)對(duì)這些任務(wù)的優(yōu)化,最終達(dá)到線(xiàn)程池優(yōu)化的目標(biāo)。另外由于有了完整的線(xiàn)程池負(fù)載情況跟蹤以及任務(wù)執(zhí)行時(shí)間數(shù)據(jù),我們對(duì)線(xiàn)程池的健康度也有了可度量的指標(biāo),這也為我們做線(xiàn)程池的自動(dòng)化配置提供了參考依據(jù)。
(2)數(shù)據(jù)清理流程未分配的問(wèn)題且最近一個(gè)月問(wèn)題不再出現(xiàn),則這個(gè)問(wèn)題大概率以后不會(huì)再發(fā)生了,針對(duì)這種問(wèn)題我們會(huì)直接清除問(wèn)題的所有信息,不會(huì)再跟蹤這個(gè)問(wèn)題。
已分配但未標(biāo)記解決的問(wèn)題且最近一個(gè)月問(wèn)題不再出現(xiàn),這種問(wèn)題一般是問(wèn)題已經(jīng)修復(fù)但是沒(méi)有及時(shí)修改狀態(tài),我們會(huì)把問(wèn)題的狀態(tài)修改為自動(dòng)失效。
狀態(tài)流轉(zhuǎn)已結(jié)束的問(wèn)題(包括已處理、已忽略、自動(dòng)失效的問(wèn)題),我們會(huì)保留最新的一條明細(xì)數(shù)據(jù)進(jìn)行存檔,剩余的明細(xì)數(shù)據(jù)會(huì)全部清除。
方法映射表中會(huì)存儲(chǔ)過(guò)往所有版本的所有方法信息,然而其中絕大多數(shù)方法其實(shí)是沒(méi)問(wèn)題的(比如簡(jiǎn)單的a+b),所以這里我們會(huì)對(duì)最近一個(gè)月解析時(shí)沒(méi)有訪(fǎng)問(wèn)的方法進(jìn)行清除(解析時(shí)沒(méi)訪(fǎng)問(wèn)的方法意味著這個(gè)方法沒(méi)發(fā)生卡頓問(wèn)題)。
同一個(gè)版本可能會(huì)上傳多次方法映射表信息,而真正發(fā)布的只會(huì)有一個(gè),因此我們會(huì)去發(fā)版平臺(tái)獲取某個(gè)版本正在發(fā)布的信息,然后把沒(méi)有正常發(fā)布的方法映射表數(shù)據(jù)刪除。




3.3.2 慢方法變化趨勢(shì)
3.3.3 FPS變化趨勢(shì)

完善性能監(jiān)控體系,補(bǔ)足網(wǎng)絡(luò)、I/O、線(xiàn)程池、磁盤(pán)等方面的監(jiān)控,通過(guò)性能監(jiān)控的數(shù)據(jù)指導(dǎo)性能優(yōu)化。
更多維度的數(shù)據(jù)篩選和過(guò)濾能力,能夠更好的對(duì)指定設(shè)備或門(mén)店進(jìn)行問(wèn)題跟蹤。
更強(qiáng)的數(shù)據(jù)處理能力,能夠更快速地處理更龐大的數(shù)據(jù)量。
完善系統(tǒng)使用體驗(yàn),如:報(bào)表呈現(xiàn)、問(wèn)題分配機(jī)制、問(wèn)題報(bào)警等。
推廣到公司其它的業(yè)務(wù)線(xiàn),幫助解決端上性能監(jiān)控問(wèn)題。
對(duì)App線(xiàn)上真實(shí)的性能情況有了數(shù)據(jù)化的指標(biāo),讓我們對(duì)性能問(wèn)題有了更清晰的感受。
通過(guò)監(jiān)控的數(shù)據(jù)指導(dǎo)我們進(jìn)行性能優(yōu)化,優(yōu)化效果也能有數(shù)據(jù)化的支撐。
通過(guò)監(jiān)控的數(shù)據(jù)能讓我們更快速的發(fā)現(xiàn)新引入的性能問(wèn)題,防止性能不斷劣化,為App的穩(wěn)定運(yùn)行提供保障。
推動(dòng)各業(yè)務(wù)團(tuán)隊(duì)進(jìn)行性能優(yōu)化,讓大家能更加重視自己產(chǎn)品的性能問(wèn)題。
