透過systrace工具看dex2oat對(duì)應(yīng)用啟動(dòng)性能的影響

不可忘記用愛心接待客旅,因?yàn)樵薪哟吐玫模恢挥X就接待了天使坟乾。---希伯來書13:2

問題描述

chrome應(yīng)用冷啟動(dòng)緩慢,跟參考機(jī)相比在luncher界面點(diǎn)擊chrome圖標(biāo)蝶防,有一個(gè)明顯的延遲甚侣,然后chrome才被啟動(dòng)起來。從點(diǎn)擊圖標(biāo)到第一個(gè)界面加載完全顯示间学,問題機(jī)相對(duì)參考機(jī)要慢3s左右渺绒。

初步分析

Android 平臺(tái)側(cè)性能優(yōu)化之應(yīng)用啟動(dòng) 一文里遇到過假冷啟動(dòng)引發(fā)的類似問題,按照這個(gè)思路檢查排除了假冷啟動(dòng)的可能菱鸥。
因?yàn)閏hrome都是通過play store跟新到最新版本v58.0.3029.83的宗兼。這也排除了chrome版本不同照成的因素。
參考機(jī)問題機(jī)的硬件參數(shù)有差異氮采,問題機(jī)硬件是工程機(jī)的標(biāo)準(zhǔn)殷绍,而參考機(jī)是出貨的硬件標(biāo)準(zhǔn)。這個(gè)可能存在影響鹊漠,但直覺告訴我不應(yīng)該有3s這么大的影響主到。

systrace分析

經(jīng)過初步分析,該用systrace進(jìn)一步深入分析躯概。采用命令:

./run_systrace.py -a com.android.chrome gfx input view am app dalvik sched freq idle load -o trace.html

分別抓取參考機(jī)和問題機(jī)啟動(dòng)chrome的systrace登钥。

問題機(jī)啟動(dòng)chrome systrace如下:


問題機(jī)systrace

參考機(jī)啟動(dòng)chrome systrace如下:


參考機(jī)systrace

注意以上獲取的systrace圖,高亮的部分bindApplication問題機(jī)相對(duì)參考機(jī)多耗時(shí)1s以上娶靡,這個(gè)是非常不合理的牧牢。
放大高亮的bindApplication區(qū)域:


bindApplication對(duì)比圖

通過上圖可以看到問題機(jī)OpenDexFilesFromOat方法把大部分時(shí)間都消耗在了打開base.apk,這個(gè)base.apk是未經(jīng)過oat優(yōu)化過的chrome apk,而參考機(jī)打開的是base.odex塔鳍。懷疑問題機(jī)上系統(tǒng)對(duì)chrome未做oat優(yōu)化伯铣。但oat優(yōu)化是默認(rèn)開啟的啊,怎么在問題機(jī)上chrome沒有生成對(duì)應(yīng)的odex文件呢轮纫?

為了進(jìn)一步確認(rèn)問題腔寡,我們需要去/data/app/com.android.chrome-1目錄下查看到底有沒有odex文件生成≌仆伲坑爹的是user版本沒有root權(quán)限查看不了放前,只能去單獨(dú)燒錄一個(gè)eng版本的bootimg了。
燒錄eng的boot獲取root權(quán)限查看/data/app/com.android.chrome-1竟然有base.odex糯彬,這遇到了什么鬼犀斋。。情连。
再次抓取此時(shí)問題機(jī)的systrace查看叽粹。


燒錄eng boot抓取systrace圖

可以看到bindApplication由之前的1.888s變成現(xiàn)在的0.848s。已經(jīng)靠近了參考機(jī)bindApplication花費(fèi)的0.699s却舀,如果再計(jì)算上eng boot對(duì)性能的影響虫几,此時(shí)問題機(jī)bindApplication耗時(shí)應(yīng)該很接近參考機(jī)了。

問題猜想

只是換了一個(gè)boot挽拔,不應(yīng)該出現(xiàn)這種變化辆脸。有沒有可能通過play store更新的chrome需要重啟或者等待一段時(shí)間oat優(yōu)化才會(huì)完成呢?因?yàn)楦峦阠hrome后馬上開始了問題分析螃诅,從之前的systrace看確實(shí)沒有odex文件生成啡氢,而燒錄eng boot后該odex文件就有了,eng boot應(yīng)該不會(huì)影響odex文件的生成术裸,燒錄的過程重啟了手機(jī)倘是,重啟過程很有可能左右該問題的主因。為了驗(yàn)證這個(gè)猜想袭艺,將參考機(jī)問題機(jī)的chrome都卸載更新的版本搀崭,重新通過play store 更新chrome,抓取systrace做對(duì)比參考猾编。

結(jié)果發(fā)現(xiàn)參考機(jī)更新完成后直接測(cè)試沒有出現(xiàn)OpenDexFilesFromOat耗時(shí)過長(zhǎng)問題瘤睹。
在看問題機(jī)同樣也沒有出現(xiàn)OpenDexFilesFromOat耗時(shí)過長(zhǎng)問題。

卸載新版本答倡,重新更新chrome轰传,沒有重啟手機(jī)竟然沒有出現(xiàn)啟動(dòng)異常。難道猜想錯(cuò)了瘪撇,odex的生成壓根與重啟手機(jī)沒有關(guān)系?這就有點(diǎn)費(fèi)解了获茬,跟預(yù)期的不一樣啊港庄,讓人抓狂.


這里寫圖片描述

會(huì)不會(huì)是剛刷完機(jī)就復(fù)現(xiàn)問題,此時(shí)后臺(tái)任務(wù)過多锦茁,導(dǎo)致chrome的oat操作沒有完成呢攘轩?
會(huì)不會(huì)是JIT的問題呢叉存?
會(huì)不會(huì)是雖然卸載掉了更新的apk码俩,但某些地方還保留了記錄,再次更新后歼捏,odex會(huì)自動(dòng)生成呢?
在不成難道這是偶現(xiàn)問題稿存?
滿腦子的疑問飛過來,為了解決這些疑問瞳秽,只有在刷機(jī)一次瓣履,從新做實(shí)驗(yàn)。

刷完機(jī)更新完chrome后练俐,為防止偶現(xiàn)問題袖迎,多次抓取了冷啟動(dòng)的systrace,都復(fù)現(xiàn)問題腺晾。


二次確認(rèn)

等待30分鐘后燕锥,再次抓取systrace


等待30分鐘后

看來不是后臺(tái)任務(wù)過多,導(dǎo)致chrome的oat操作沒有完成悯蝉。
多次使用chrome,在抓取systrace分析归形。同樣還是有問題,這里圖就不貼了鼻由∠玖瘢看來也不是JIT的問題。
在看重啟手機(jī)后的現(xiàn)象,啟動(dòng)時(shí)間終于正常了蕉世。


重啟手機(jī)odex文件生成

終于找到了問題的表因蔼紧,原來通過play store更新chrome應(yīng)用,只有重啟系統(tǒng)才會(huì)去做odex優(yōu)化狠轻。而如果先卸載掉更新的chrome歉井,在重新更新則沒有問題。

刨根溯源

問題原因找到了哈误,那這個(gè)問題是play store的問題還是說系統(tǒng)本身的問題哩至,無法完全確認(rèn),但猜測(cè)很可能是系統(tǒng)本身的問題蜜自,google 不會(huì)留下這么明顯的bug菩貌。因此還需要追溯沒有做odex的原因。
odex的詳細(xì)過程這里不展開講述。后續(xù)在單獨(dú)起一篇做總結(jié)。先給出主要的調(diào)用關(guān)系误算。


dex2oat調(diào)用關(guān)系圖

沿著上圖最終發(fā)現(xiàn)了問題所在轨淌。原來之前的同事在做開機(jī)優(yōu)化時(shí)做了一個(gè)功能坦胶,將非重要應(yīng)用的dex2oat操作放在了開機(jī)之后奄侠∨钛鳎可是沒有考慮好更新應(yīng)用時(shí)的邏輯處理丛肢,導(dǎo)致了問題的發(fā)生诈乒。本質(zhì)原因找到了罩扇,那么該問題解起來就有方向了。這里涉及到具體的功能怕磨,不在贅述喂饥。

總結(jié)

程序員總愛給程序員挖坑,越向底層的改動(dòng)越要小心肠鲫,牽一發(fā)而動(dòng)全身啊员帮。
性能問題涉及的模塊確實(shí)很多,許多問題總是那么的撲朔迷離导饲,一定要有耐心去分析捞高。
通過分析過程,我們也可以看到dex2oat對(duì)應(yīng)用啟動(dòng)的性能確實(shí)提升巨大渣锦。systrace的好處就是能量化出這種性能差異硝岗。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市泡挺,隨后出現(xiàn)的幾起案子辈讶,更是在濱河造成了極大的恐慌,老刑警劉巖娄猫,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贱除,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡媳溺,警方通過查閱死者的電腦和手機(jī)月幌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悬蔽,“玉大人扯躺,你說我怎么就攤上這事⌒В” “怎么了录语?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)禾乘。 經(jīng)常有香客問我澎埠,道長(zhǎng),這世上最難降的妖魔是什么始藕? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任蒲稳,我火速辦了婚禮氮趋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘江耀。我一直安慰自己剩胁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布祥国。 她就那樣靜靜地躺著昵观,像睡著了一般。 火紅的嫁衣襯著肌膚如雪系宫。 梳的紋絲不亂的頭發(fā)上索昂,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天建车,我揣著相機(jī)與錄音扩借,去河邊找鬼。 笑死缤至,一個(gè)胖子當(dāng)著我的面吹牛潮罪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播领斥,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼嫉到,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了月洛?” 一聲冷哼從身側(cè)響起何恶,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嚼黔,沒想到半個(gè)月后细层,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唬涧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年疫赎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碎节。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡捧搞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出狮荔,到底是詐尸還是另有隱情胎撇,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布殖氏,位于F島的核電站晚树,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏受葛。R本人自食惡果不足惜题涨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一偎谁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纲堵,春花似錦巡雨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至茂附,卻和暖如春正蛙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背营曼。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工乒验, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蒂阱。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓锻全,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親录煤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鳄厌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 上一篇文章Android 平臺(tái)側(cè)性能優(yōu)化之應(yīng)用啟動(dòng)采用多個(gè)命令分析了平臺(tái)的cpu/memory等方面對(duì)Email啟...
    小草凡閱讀 3,079評(píng)論 5 11
  • 注意事項(xiàng): 布局優(yōu)化;盡量使用include妈踊、merge了嚎、ViewStub標(biāo)簽,盡量不存在冗余嵌套及過于復(fù)雜布局(...
    HarryXR閱讀 5,149評(píng)論 1 19
  • 請(qǐng)保持淡定廊营,分析代碼歪泳,記住:性能很重要赘风。 啟動(dòng)時(shí)間優(yōu)化 毫無疑問夹囚,應(yīng)用的啟動(dòng)速度越快越好。 本文可以幫助你優(yōu)化應(yīng)用...
    Mupceet閱讀 11,373評(píng)論 5 19
  • 小狗見到響尾蛇邀窃,沖過去照頭上就舔荸哟,蛇直接被撲面而來的熱情擊暈,三個(gè)疑問直擊它的靈魂:這貨想干啥瞬捕?它咋看上我了鞍历??我...
    流浪老頑童閱讀 109評(píng)論 0 0
  • 記得小學(xué)四年級(jí)的時(shí)候肪虎,學(xué)過一篇文章————《幸福是什么》劣砍,文章的大意是一個(gè)女神引領(lǐng)三個(gè)男孩體會(huì)幸福的含義,十年之后...
    清淺光陰閱讀 263評(píng)論 0 0