2018-06-29 一個(gè)定時(shí)器引發(fā)的血案

? ? ? ? 額,這兩天主要是圍繞著上海的項(xiàng)目按照客戶的需求更改設(shè)計(jì),在這個(gè)過(guò)程中,有一個(gè)隱藏特別深的bug在項(xiàng)目中暴露出來(lái),在測(cè)試環(huán)境中沒(méi)有暴露,而且很難復(fù)現(xiàn),其實(shí)現(xiàn)在想想自己挺蠢的,一個(gè)簡(jiǎn)單的問(wèn)題折騰了一個(gè)下午才解決也是沒(méi)誰(shuí)了,現(xiàn)在特地寫(xiě)出來(lái)長(zhǎng)個(gè)教訓(xùn),希望看到這篇簡(jiǎn)書(shū)的朋友們也不要犯我這個(gè)低級(jí)錯(cuò)誤,下面我將展開(kāi)復(fù)盤(pán)一下這個(gè)問(wèn)題的始末:??

? ? ? ?1項(xiàng)目描述:本公司和上海某個(gè)公司合作,我們公司的項(xiàng)目部署在上海的某個(gè)服務(wù)器上進(jìn)行現(xiàn)場(chǎng)大屏展示給某些領(lǐng)導(dǎo),并且進(jìn)行功能演示,出于保密原因,照片不做展示,可以看出,頁(yè)面呈現(xiàn)崩潰狀態(tài),其他組件頁(yè)面也有類(lèi)似的情況發(fā)生,時(shí)間段不一定分布在一個(gè)小時(shí)左右,看到一線人反饋的問(wèn)題,當(dāng)時(shí)心都涼了。

? ? ? ?2 問(wèn)題定位:這個(gè)問(wèn)題在測(cè)試環(huán)境下沒(méi)有測(cè)試到,壓力測(cè)試也沒(méi)有測(cè)試,而且打開(kāi)控制臺(tái),發(fā)現(xiàn)并沒(méi)有error;可以看出這個(gè)問(wèn)題并不能很好的復(fù)現(xiàn)。筆者看到這個(gè)問(wèn)題的下意識(shí)是內(nèi)存溢出,但是這個(gè)內(nèi)存溢出可能是java后臺(tái)的可能性比較大 ,因?yàn)閖s本身并不涉及到性能問(wèn)題,于是和后臺(tái)一起進(jìn)行性能測(cè)試,后臺(tái)反饋,java后臺(tái)內(nèi)存并沒(méi)有溢出:截圖如下:

如果不是后端的原因,只能是前端的原因了。在這里要說(shuō)一下,首頁(yè)的狀態(tài)是每隔兩分鐘就要向后臺(tái)發(fā)起請(qǐng)求更新前臺(tái)數(shù)據(jù),筆者的潛意識(shí)里應(yīng)該是上一次數(shù)據(jù)沒(méi)有及時(shí)銷(xiāo)毀,導(dǎo)致內(nèi)存占用過(guò)多,于是將更新時(shí)間縮短,進(jìn)行100毫秒刷新,觀察控制臺(tái)的情況:

大約過(guò)了過(guò)4分鐘左右,頁(yè)面出現(xiàn)崩潰狀態(tài),筆者趕緊打開(kāi)控制臺(tái),發(fā)現(xiàn)如下問(wèn)題:

可以確定是我的問(wèn)題了,但是具體問(wèn)題出現(xiàn)在哪里仍然不是很清楚,于是借助谷歌瀏覽器工具進(jìn)行debug,截圖和提示如下:

在這里我們用performance進(jìn)行一段時(shí)間的截屏,然后分析處理,這種方法我還沒(méi)有熟練掌握,具體方式我會(huì)在文末選一個(gè)好的文章鏈接,別的大家就不用看了,我選的肯定最具有代表性。


通過(guò)上面這個(gè)圖可以肯定就是我的定時(shí)器有問(wèn)題,但是定時(shí)器的問(wèn)題到底出現(xiàn)在哪里,繼續(xù)根據(jù)memory進(jìn)行定位:


我們按照?qǐng)D片上的提示截取一段時(shí)間快照 具體方法我在文末貼出,這里不進(jìn)行贅述


到這里問(wèn)題的原因就就已經(jīng)確定了,可以看出有Object造成的影響排在了第二位,因?yàn)閷?duì)象本身會(huì)關(guān)聯(lián)很多數(shù)組,字符串以及其他內(nèi)容,問(wèn)題確定,這個(gè)定時(shí)器產(chǎn)生了好多對(duì)象,于是檢查代碼:

上圖中的echart對(duì)象如下:?

到現(xiàn)在,問(wèn)題的根本原因已經(jīng)找到了,就是在定時(shí)器里面不斷的構(gòu)造echart對(duì)象,這個(gè)echart對(duì)象會(huì)在vue實(shí)例上不斷的增加,導(dǎo)致舊的對(duì)象沒(méi)有銷(xiāo)毀,新的對(duì)象不斷產(chǎn)生,每生成一個(gè)新的對(duì)象就會(huì)申請(qǐng)占用一塊內(nèi)存,短時(shí)間內(nèi)不會(huì)爆發(fā),但是一旦達(dá)到這個(gè)瀏覽器承受的閾值,內(nèi)存泄露,導(dǎo)致頁(yè)面崩潰。

此時(shí)此刻,心理就是自己真蠢。

? ? ? 3問(wèn)題解決:筆者之所以每次不斷的new對(duì)象是因?yàn)槊看涡聛?lái)的數(shù)據(jù)都要通過(guò)這個(gè)函數(shù)的參數(shù)傳入進(jìn)去,試圖在外面new一個(gè)對(duì)象在定時(shí)器里面跟新vue的data數(shù)據(jù)是有錯(cuò)誤的,這個(gè)本人親自試過(guò),那么既然這種辦法行不通了,只能在傳入數(shù)據(jù)前進(jìn)行對(duì)象判斷了,但是老對(duì)象和新對(duì)象看似一樣,其實(shí)他是兩個(gè)不同的個(gè)體,證據(jù)如下:

于是打印這個(gè)echrt對(duì)象,發(fā)現(xiàn)每個(gè)對(duì)象多出一個(gè)ID,我們可以通過(guò)判斷ID的方法來(lái)修復(fù)這個(gè)問(wèn)題,

到現(xiàn)在進(jìn)過(guò)5個(gè)小時(shí)的定位和分析,問(wèn)題解決了,但是還沒(méi)有根治,我們只是通過(guò)一個(gè)函數(shù)阻止了重造行為,真正的做法應(yīng)該是定時(shí)器里面就他不應(yīng)該重造,在定位的過(guò)程中,后臺(tái)指出了我代碼中的不足之處,非常感謝,只有不斷的review才能進(jìn)步,在這里特別感謝他們。

參考鏈接如下面:阮一峰內(nèi)存泄露教程? ? ? ? ? ? ? ? ? ?performance學(xué)習(xí)方法? ? ? ? ? Memory學(xué)習(xí)方法? ? ? ? ? ? ? ? ? ?一個(gè)Vue頁(yè)面的內(nèi)存泄露分析??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,156評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,401評(píng)論 3 415
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,069評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 62,873評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,635評(píng)論 6 408
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,128評(píng)論 1 323
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,203評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,365評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,881評(píng)論 1 334
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,733評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,935評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,475評(píng)論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,172評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,582評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,821評(píng)論 1 282
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,595評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,908評(píng)論 2 372

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類(lèi)型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,120評(píng)論 1 32
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 27,555評(píng)論 1 45
  • 文 | 灼灼 閱讀《別讓猴子跳回背上》,副標(biāo)題: 為什么領(lǐng)導(dǎo)沒(méi)時(shí)間,下屬?zèng)]事做? 人力資源課的老師推薦書(shū)籍,寫(xiě)的淺...
    灼灼2015閱讀 445評(píng)論 0 0
  • 天還是那么藍(lán),沒(méi)有一絲雜質(zhì),如同我的眼里,容不下一粒塵埃——— 2018年3.12日 在家復(fù)習(xí)英語(yǔ)的我,中午被爸爸...
    婉山同學(xué)閱讀 389評(píng)論 0 2
  • 這段時(shí)間的忙忙碌碌,沒(méi)有時(shí)間整理自己的感受,今天稍有空閑,來(lái)寫(xiě)下最近的班主任感受吧! 說(shuō)實(shí)在話,自從帶這個(gè)班我的情...
    揮手之間的專(zhuān)欄閱讀 400評(píng)論 0 0