標(biāo)題: 疑神疑鬼找bug [打印本頁]

作者: 51hei不    時(shí)間: 2016-6-19 02:12
標(biāo)題: 疑神疑鬼找bug
昨晚遇到神奇問題,網(wǎng)關(guān)做壓力測(cè)試,在CPU很高的時(shí)候會(huì)崩潰,看堆棧,都是崩潰在_heap_alloc這個(gè)函數(shù)里面,百思不得其解,以為是內(nèi)存碎片導(dǎo)致的,寫了一段檢測(cè)代碼,可的捕獲到內(nèi)存碎片嚴(yán)重,new 幾個(gè)字節(jié)都會(huì)失敗,特別是在cpu高的時(shí)候,以為是我大量使用std::string 和map之類容器問題,以為找到了原因,然后就是各種折騰,折騰了一晚上沒解決。今天早上睡了個(gè)飽覺,過來再想出了一下,感覺不應(yīng)該是內(nèi)存碎片的問題。如果是內(nèi)存碎片,不應(yīng)該在堆分配時(shí)拋訪問越界異常,然后使用分解方法,把一個(gè)個(gè)模塊拆下來單獨(dú)測(cè),搞了一上午,終于找到原因了,原來在寫日志模塊里面,有一個(gè)多線程寫環(huán)型隊(duì)列加鎖有問題,沒鎖成。就這樣導(dǎo)致了多線程同時(shí)操作queue,導(dǎo)致堆被破壞,在_heap_alloc時(shí),可有是內(nèi)部進(jìn)行了資源回收整理,然后就崩潰了。改了二行代碼,把bug修復(fù)了,中午吃飯時(shí)就讓壓力在跑,跑了幾百萬,啥事都沒了。

后來總結(jié)了一下,這種神奇問題基本都是自已的事情,想在操作系統(tǒng)上找理由是不行的。








歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1