精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一次C++偽“內(nèi)存泄漏”的排查之旅

開發(fā) 前端
前段時間做一個需求,需要用到一個本地詞典文件。該詞典原始文件超過2G,在服務(wù)啟動的時候加載到內(nèi)存中,并且保持詞典數(shù)據(jù)的熱加載,也就是不停服更新詞典數(shù)據(jù)到服務(wù)進(jìn)程的內(nèi)存中。

前段時間做一個需求,需要用到一個本地詞典文件。該詞典原始文件超過2G,在服務(wù)啟動的時候加載到內(nèi)存中,并且保持詞典數(shù)據(jù)的熱加載,也就是不停服更新詞典數(shù)據(jù)到服務(wù)進(jìn)程的內(nèi)存中。

[[349821]]

之前有同事在其他項(xiàng)目中有熱更新詞典的代碼,我就直接拿來用了。這是典型的雙Buffer詞典。也就是程序運(yùn)行期間,內(nèi)存中會同時維持兩份詞典:一份前臺詞典供運(yùn)行時各處理邏輯檢索,另一份是后臺詞典,在檢測到目標(biāo)文件修改時(通過檢查文件mtime判斷的是否更新)。在詞典數(shù)據(jù)更新時,重新解析加載,最新的數(shù)據(jù)儲存到后臺詞典中。最后兩個詞典做0 - 1 切換,也就是前臺詞典變后臺詞典,后臺詞典變前臺詞典。

詞典類在服務(wù)中采用的核心數(shù)據(jù)結(jié)構(gòu)是unordered_map。前后臺詞典也就是會存在兩個unordered_map。key是某某ID,value是詞典原始文件逐行解析后重組出來的protobuf Message對象。

在線下環(huán)境(非線上生產(chǎn)環(huán)境)測試的時候,自測完代碼邏輯無問題。喵了一眼機(jī)器基礎(chǔ)指標(biāo),發(fā)現(xiàn)內(nèi)存會多次上漲。

 

自己畫的:橫軸是時間,縱軸是機(jī)器占用內(nèi)存

 

內(nèi)存占用在 5-10G之間那次是第一次啟動完成的時間,后面又連續(xù)漲了兩次。懷疑是有內(nèi)存泄露,在把流量停掉以后,重啟服務(wù)。觀測到內(nèi)存仍舊會規(guī)律上漲,且一個小時會漲一次。如此規(guī)律,讓人不得不懷疑是詞典更新導(dǎo)致。詞典文件是ceph掛載的,會自動更新,所以我?guī)缀鯖]關(guān)注過。確認(rèn)了一下詞典的更新時間和更新頻率。確實(shí)也是一小時更新一次,且其每次更新的時間和內(nèi)存每次上漲時間相match。

想盡快驗(yàn)證一下是否真的是詞典更新導(dǎo)致的內(nèi)存上漲,等著詞典一次一次例行更新就太慢了。不過由于這個詞典API判斷詞典是否更新是檢測的文件修改時間(mtime),所以通過touch該詞典文件,可以提前觸發(fā)詞典的加載。

按理說雙buffer的詞典,在正常啟動后暴漲一次內(nèi)存是合理的。因?yàn)閱拥臅r候內(nèi)存中加載了詞典的一個版本。一個小時之后詞典更新,第二個版本的詞典數(shù)據(jù)也會加入到內(nèi)存。而彼時原先的前臺詞典雖然變成了后臺詞典,但是內(nèi)存并不會立即delete(持有舊詞典數(shù)據(jù)的unordered_map)。因?yàn)榭赡苓\(yùn)行的請求處理邏輯仍然會用到舊詞典。

重新閱讀這個詞典API的實(shí)現(xiàn)。當(dāng)內(nèi)存中存在兩個版本的詞典后,等到詞典第二次更新到時候(也就是第三個版本詞典出現(xiàn)的時候),該實(shí)現(xiàn)邏輯是先創(chuàng)建一個詞典對象存儲第三個版本詞典的數(shù)據(jù)。若其加載解析成功則原先的后臺詞典對象就會被delete(第一個版本的詞典占用的內(nèi)存被釋放)。然后后臺詞典的指針指向剛新建的對象(第三個版本的詞典正式成為后臺詞典),最后做前后臺詞典的切換(第三個版本詞典成為前臺詞典,第二個版本的詞典變成后臺詞典)。

也就是說按照這個詞典API的實(shí)現(xiàn)邏輯,內(nèi)存中確實(shí)存在某個時刻存儲著三份詞典的數(shù)據(jù),漲兩次內(nèi)存也說得通,但是當(dāng)新的詞典加載完成,上上個版本的詞典對象是會被delete的。所以內(nèi)存應(yīng)該回落才對!難道是delete沒有被觸發(fā)嗎?

嘗試了touch了幾次詞典文件發(fā)現(xiàn),確實(shí)詞典文件更新會導(dǎo)致內(nèi)存連續(xù)上漲。但詭異的是后來我嘗試縮減詞典到一個特別小的大小,卻觀察到機(jī)器內(nèi)存并不會下降!哦?這是詞典API本身存在內(nèi)存泄露的風(fēng)險嗎?和剛才看代碼時的疑惑一樣,上上版本的詞典沒有觸發(fā)delete?然而通過多次測試又發(fā)現(xiàn)這樣一個事實(shí):

詞典內(nèi)存不會永遠(yuǎn)上漲,啟動完成之后,最多漲兩次,第三次也會漲但比較少,第四次五次更新詞典文件,則幾乎不會導(dǎo)致內(nèi)存的變化!如果說存在詞典對象沒有被正常delete,那么內(nèi)存占用應(yīng)該會繼續(xù)上漲,而不是趨于穩(wěn)定。

頭疼。一方面內(nèi)存不會無限上漲,不像是內(nèi)存泄露;但另一方面詞典縮小卻不會導(dǎo)致內(nèi)存占用減少。

這……讓我在十月的深夜凌亂了。問題又兜回來了嗎?這到底是不是內(nèi)存泄露?或者到底是不是詞典更新導(dǎo)致的呢?

嘗試了用一些工具來輔助定位是否有內(nèi)存泄露的風(fēng)險,但一無所獲。后來注釋掉了每行詞典數(shù)據(jù)重組成pb對象之后insert進(jìn)unordered_map的代碼,經(jīng)測試詞典更新確實(shí)不會再導(dǎo)致內(nèi)存上漲。說白了實(shí)錘了內(nèi)存上漲就是這兩個前后臺的unordered_map引起的。然而通過加日志也能證實(shí)每次舊map對象的delete每次都有被調(diào)用到,也就是不存在第三個map對象沒被delete的情況,那么為什么delete掉對象后,其占用的內(nèi)存無法釋放呢?

遽然陷入絕境,坐困愁城。

突然我靈光一現(xiàn):會不會是glibc導(dǎo)致的持呢?我們都知道內(nèi)存分配器,比如glibc的ptmalloc,有時候內(nèi)存分配器的內(nèi)存管理策略并不一定如我們所愿。

經(jīng)證實(shí)確實(shí)glibc有這樣的內(nèi)存分配策略:為了避免大對象頻繁的內(nèi)存分配和釋放,glibc并不一定會把delete的對象內(nèi)存立即歸還給操作系統(tǒng),有時候可能繼續(xù)讓進(jìn)程持有該內(nèi)存。當(dāng)后續(xù)再有大對象需要分配的時候,可以直接使用,而不再需要再去向操作系統(tǒng)申請內(nèi)存。glibc這個策略其實(shí)是為了提高內(nèi)存分配效率的,并且也不會無限占用內(nèi)存,而是在達(dá)到某個平衡點(diǎn)之后內(nèi)存便不再增長,這也和我所觀察到的現(xiàn)象一致。

說到底這其實(shí)不算是一次『內(nèi)存泄露』。然而這個現(xiàn)象既然不會持續(xù)占用內(nèi)存,那么到底需不需要解決呢?在我的場景下,答案是肯定的。因?yàn)槲覀兊脑~典比較大,且不可控,當(dāng)線上正常服務(wù)的時候,內(nèi)存也會正常上漲,其實(shí)是存在OOM風(fēng)險的。在運(yùn)行效率和服務(wù)穩(wěn)定性之間相比較,自然要讓步于穩(wěn)定性。

那么怎么解決呢?雖然沒有直接搜索到答案,但是直覺告訴我一個更好的內(nèi)存分配器或許可以解決。死馬當(dāng)活馬醫(yī),于是我嘗試了讓程序鏈接tcmalloc或jemalloc。最終jemalloc表現(xiàn)良好,可以慢慢釋放掉多余占用的內(nèi)存。

那些凸起的線是加載和解析詞表的過程中,突然飆上來的內(nèi)存,但隨機(jī)又很快回落,接著慢慢繼續(xù)回落。其實(shí)jemalloc在針對大對象存儲時,其性能表現(xiàn)也并不差,甚至使用了jemalloc之后服務(wù)一次請求響應(yīng)的耗時還有不少縮減。

責(zé)任編輯:未麗燕 來源: 知乎專欄
相關(guān)推薦

2020-08-27 21:36:50

JVM內(nèi)存泄漏

2022-02-08 17:17:27

內(nèi)存泄漏排查

2019-02-20 09:29:44

Java內(nèi)存郵件

2023-01-04 18:32:31

線上服務(wù)代碼

2018-09-14 10:48:45

Java內(nèi)存泄漏

2021-08-19 09:50:53

Java內(nèi)存泄漏

2011-06-16 09:28:02

C++內(nèi)存泄漏

2018-07-20 08:44:21

Redis內(nèi)存排查

2017-01-23 12:40:45

設(shè)計(jì)演講報表數(shù)據(jù)

2025-03-17 10:01:07

2024-08-19 00:10:00

C++內(nèi)存

2019-03-15 16:20:45

MySQL死鎖排查命令

2021-05-13 08:51:20

GC問題排查

2025-08-04 01:00:00

JavaScript內(nèi)存泄漏前端

2021-11-02 07:54:41

內(nèi)存.NET 系統(tǒng)

2022-09-13 17:46:19

STA模式內(nèi)存

2021-02-11 14:06:38

Linux內(nèi)核內(nèi)存

2014-11-12 13:22:34

2023-04-06 07:53:56

Redis連接問題K8s

2011-06-30 22:23:21

打印機(jī)常見問題
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

在线免费av电影| 中文字幕久久熟女蜜桃| 激情小说亚洲图片| 91福利精品第一导航| 在线码字幕一区| 免费看日韩av| 蜜臀av一级做a爰片久久| 色哟哟亚洲精品一区二区| 国模大尺度视频| 久久电影tv| 一区二区三区在线免费观看| 欧美连裤袜在线视频| 国产精品高潮呻吟AV无码| 一区二区日本视频| 久久精品成人欧美大片| 97人妻天天摸天天爽天天| 祥仔av免费一区二区三区四区| 亚洲高清不卡在线观看| 亚洲欧美日韩国产成人综合一二三区 | 九九亚洲精品| 精品久久久久久综合日本欧美 | 国产精品字幕| 亚洲第一狼人社区| 一区二区三视频| 色视频在线观看免费| 国产精品一二三| 国产精品一二三在线| 天天综合网入口| 欧美一区二区三区另类| 色综合亚洲精品激情狠狠| 久久一区二区电影| 77成人影视| 91麻豆精品国产91久久久更新时间 | 粉嫩av四季av绯色av第一区| 中文字幕一区二区三区免费看| 国产视频一区在线观看一区免费| 精品中文字幕乱| 女人18毛片毛片毛片毛片区二| 亚洲va久久久噜噜噜久久| 日韩欧美色综合网站| 天天综合网久久| 国产激情欧美| 欧美最猛性xxxxx直播| 蜜臀久久99精品久久久酒店新书| 欧美极品videos大乳护士| 亚洲国产日韩精品| 精品无码av无码免费专区| 久久五月精品| 日韩一区有码在线| 一区二区三区欧美在线| 色综合久久久久综合一本到桃花网| 久久久久久久久伊人| 久久久久网址| 蜜芽tv福利在线视频| 久久婷婷综合激情| 久久综合狠狠综合久久综青草| 好吊色一区二区三区| 国产福利精品导航| 亚洲www在线观看| 99国产在线播放| 国产麻豆一精品一av一免费| 成人做爰www免费看视频网站| 91好色先生tv| 国产一区激情在线| 51蜜桃传媒精品一区二区| 国产高清第一页| 国产成人精品影视| 狠狠久久综合婷婷不卡| 免费一级毛片在线观看| 国产日本亚洲高清| 亚洲一区在线免费| 精品176二区| 亚洲永久免费视频| 啊啊啊一区二区| 日韩av首页| 91精品欧美一区二区三区综合在| 可以看的av网址| 欧美电影在线观看免费| 一区二区欧美日韩视频| 四虎精品免费视频| 91久久中文| 国产精品成人av性教育| 国产露脸无套对白在线播放| av网站免费线看精品| 欧美日韩天天操 | 久久久人成影片一区二区三区| 国产成人啪精品午夜在线观看| 欧美亚洲一级| 国产在线精品一区免费香蕉 | 色婷婷久久av| 国产午夜精品无码| 秋霞电影网一区二区| 91网站在线免费观看| 色婷婷av一区二区三区之e本道| 91小视频免费观看| 中文字幕av久久| 老色鬼在线视频| 欧美日韩精品综合在线| 黑森林av导航| 欧州一区二区| 欧美高清第一页| 在线精品免费视| 国产老女人精品毛片久久| 久久riav二区三区| 毛片在线播放a| 亚洲成a人片在线观看中文| 伊人国产在线视频| 久久av国产紧身裤| 最近2019中文字幕大全第二页| 日本三级黄色大片| 久久精品72免费观看| 国产精品日韩欧美一区二区三区| 国产女主播在线写真| 一区二区三区精品在线观看| 天天干在线影院| 欧美激情极品| 欧美日本中文字幕| 91精品视频免费在线观看 | 免费久久99精品国产自| 四季久久免费一区二区三区四区| 欧美在线视频你懂得| 国产一级二级在线观看| 欧美国产专区| 91精品久久久久久久久久| 精品av中文字幕在线毛片| 亚洲国产日日夜夜| 无码人妻丰满熟妇区毛片蜜桃精品| 奇米影视亚洲| 国产999在线| 亚洲欧美日韩成人在线| 亚洲一区二区三区四区五区中文| 手机版av在线| 成人激情在线| 国产成人拍精品视频午夜网站| 熟妇人妻中文av无码| 一二三四区精品视频| 亚洲色图偷拍视频| 99精品美女| 成人福利在线视频| 日韩三级影院| 欧美色男人天堂| 亚洲综合第一区| 蜜桃视频一区二区三区 | 在线免费av电影| 欧美性受极品xxxx喷水| 人妻一区二区视频| 美女久久一区| 涩涩涩999| 国产精品蜜月aⅴ在线| 伊人久久久久久久久久| 亚洲精品国产精品国自产网站按摩| 91麻豆国产福利精品| 色欲av无码一区二区人妻| 一个色免费成人影院| 日韩免费在线观看视频| 免费在线看v| 欧美日韩视频在线第一区| 亚洲欧美卡通动漫| 国产精品一卡二| 99久久免费观看| 波多野结衣在线一区二区| 992tv成人免费影院| 亚洲色大成网站www| 日本韩国欧美三级| 亚洲欧美日韩第一页| 黄色小说综合网站| 国产视频在线观看网站| 亚洲成人影音| 热久久这里只有| 99re热久久这里只有精品34| 欧美高清一级片在线| 亚洲国产精品免费在线观看| 成人黄色大片在线观看| 能在线观看的av| 欧美少妇性xxxx| 91在线免费视频| 2020av在线| 国产一区二区三区直播精品电影 | 精品一区二区免费视频| 91精品国产毛片武则天| 欧美美女在线直播| 国产精品一区二区女厕厕| av免费在线观看网址| 日韩大片免费观看视频播放| 久久国产香蕉视频| 亚洲一区在线播放| 久久精品国产亚洲AV熟女| 久久爱另类一区二区小说| 老子影院午夜伦不卡大全| 自拍自偷一区二区三区| 91久久久久久| 天堂√中文最新版在线| 久久久av一区| 性猛交xxxx| 日韩一区二区免费高清| 你懂的国产在线| 伊人色综合久久天天| 日本少妇xxxxx| 粉嫩一区二区三区性色av| 久久久久久久少妇| 激情欧美日韩| 国产又粗又硬又长| 国产一区二区三区91| 国产精品 日韩| 久久久久伊人| 欧美中文字幕视频在线观看| 伊人电影在线观看| 中文字幕免费精品一区高清| 肥臀熟女一区二区三区| 欧美美女bb生活片| 国产精品久久久久久人| 一区二区三区精品| 四虎影视1304t| 久久先锋影音av| 丝袜熟女一区二区三区| 国产一区二区0| 亚洲一级片免费| 久久激情综合| 免费黄色福利视频| 在线播放精品| 亚洲色婷婷久久精品av蜜桃| 欧美丝袜激情| 欧美精品成人一区二区在线观看 | 欧美在线视频二区| 国产精品美女在线观看直播| 成人性生交大片免费看视频直播| 国产亚洲一区二区手机在线观看 | 国产成人精品免费视频网站| 亚洲欧美久久久久| 日韩影院免费视频| av黄色在线网站| 亚洲神马久久| 欧美 日本 亚洲| 精品9999| 天天夜碰日日摸日日澡性色av| 午夜精品久久| 一二三四中文字幕| 欧美精品午夜| 久久久久福利视频| 欧美阿v一级看视频| 精品一区二区成人免费视频| 黄色av网站在线| 亚洲欧美在线观看| 91禁男男在线观看| 中文在线一区二区| 亚洲精品国产91| 国产亚洲精品精华液| 一级片视频免费看| 欧美国产成人在线| xxxxx99| 国产精品丝袜黑色高跟| 中文字幕精品亚洲| 一区在线播放视频| 国产va在线播放| 亚洲综合一区在线| 日韩av一区二区在线播放| 五月天一区二区| 国产精品乱码一区二区三区| 亚洲成人av观看| 国产精品久久一| crdy在线观看欧美| 亚洲综合中文字幕在线| 一区二区三区自拍视频| 国语精品免费视频| 夜夜躁狠狠躁日日躁2021日韩| 日本三级中国三级99人妇网站| 精品少妇av| 中文字幕超清在线免费观看| 精品福利av| 成人午夜视频免费在线观看| 免费黄网站欧美| 中文字幕第10页| jvid福利写真一区二区三区| 国产乱码精品一区二区三区中文 | 日本老师69xxx| 成人av色网站| 亚洲r级在线观看| 精品日产乱码久久久久久仙踪林| 欧美不卡三区| 色狮一区二区三区四区视频| 成人在线免费高清视频| 亚洲少妇诱惑| 久国产精品视频| 成人网在线免费视频| 99久久精品免费视频| 亚洲人精品一区| 亚洲欧美日韩综合一区| 欧美videos粗暴| 国产日韩欧美综合精品| 欧美理论视频| 欧美在线观看视频免费| 国产精品最新自拍| 中文字幕12页| 99re热这里只有精品免费视频| 夫妇交换中文字幕| 樱花草国产18久久久久| 尤物视频免费观看| 精品美女被调教视频大全网站| 青青草视频在线观看| 欧美精品制服第一页| 中文在线аv在线| 亚洲一区二区中文| 国产一区二区三区四区| 免费人成自慰网站| 精品在线播放午夜| 在线不卡av电影| 亚洲福利一区二区| ,亚洲人成毛片在线播放| 亚洲激情第一页| 菠萝蜜视频国产在线播放| 国产日韩欧美电影| 妺妺窝人体色WWW精品| 亚洲亚洲人成综合网络| 中文字幕一区二区三区四区视频| 亚洲国产欧美久久| 中文字幕有码在线视频| 国产精品久久久久久久av电影| 美日韩黄色大片| 乱熟女高潮一区二区在线| 久草精品在线观看| 日本美女xxx| 色悠悠久久综合| 天天射天天色天天干| 久久99精品久久久久久琪琪| 国产成+人+综合+亚洲欧美| 免费日韩av电影| 亚洲国产日韩欧美一区二区三区| 男插女视频网站| 国产精品欧美极品| 视频在线精品一区| 伊人久久大香线蕉综合网站 | 国内小视频在线看| 国产日韩一区在线| 精品国产乱码久久久久久1区2匹| 欧美色图色综合| 成人app下载| 亚洲一区二区91| 欧美sm极限捆绑bd| 在线黄色网页| 99se婷婷在线视频观看| 永久91嫩草亚洲精品人人| 欧美成人三级在线播放| 中文字幕va一区二区三区| 中文字幕免费高清网站| 亚洲欧洲日产国产网站| 久久uomeier| 欧美性xxxxxxxx| 男人的天堂在线视频| 欧美在线视频观看| 要久久爱电视剧全集完整观看 | 涩涩涩在线视频| 久久66热这里只有精品| 亚洲精品乱码| 免费a级黄色片| 日韩欧美大尺度| 精彩国产在线| 国产精品一区电影| 888久久久| 国产精品无码自拍| 亚洲成人综合网站| 天天操天天干天天干| 欧美又大又硬又粗bbbbb| 免费一区二区三区视频导航| 爆乳熟妇一区二区三区霸乳| 国产精品久久久久久久久快鸭| 国产三区在线播放| 欧美黑人巨大精品一区二区| 国产美女撒尿一区二区| 国产精品50p| 亚洲国产精品精华液ab| 国产一区二区三区三州| 欧美激情影音先锋| 少妇久久久久| 蜜桃免费在线视频| 亚洲精品视频免费观看| 蜜臀av午夜精品| 人九九综合九九宗合| 99久久亚洲精品蜜臀| 91成人在线观看喷潮蘑菇| 欧美性感美女h网站在线观看免费| 成年人视频网站在线| 亚洲尤物视频网| 国产欧美日韩一级| 五月天婷婷丁香网| 精品国产凹凸成av人网站| 97久久香蕉国产线看观看| 中日韩在线视频| 成人黄色av网站在线| 中文字幕欧美在线观看| 久久久久日韩精品久久久男男| 精品72久久久久中文字幕| 日本r级电影在线观看| 欧美性生交大片免网| h片在线免费| 久久婷婷人人澡人人喊人人爽| 韩日欧美一区二区三区| 国产一级18片视频| 久久99国产综合精品女同| heyzo久久| 91精品小视频|