精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

国产日产精品_国产精品毛片| 欧美24videosex性欧美| 美女高潮久久久| 欧美刺激性大交免费视频| 亚洲の无码国产の无码步美| 成人片免费看| 亚洲三级理论片| 国产在线精品二区| 国产在线观看第一页| 亚洲影视一区| 亚洲精品视频免费在线观看| 向日葵污视频在线观看| 538视频在线| 国产精品国产成人国产三级 | 国产精品国产三级在线观看| 香蕉久久一区二区不卡无毒影院 | 麻豆tv入口在线看| 91麻豆福利精品推荐| 国产久一一精品| 五月婷婷中文字幕| 欧美黄色免费| 最近日韩中文字幕中文| 男人网站在线观看| 国产精品视频一区视频二区| 欧美亚洲综合久久| 午夜肉伦伦影院| 性网站在线观看| 国产精品久久网站| 欧洲国产精品| 天天综合网在线观看| 蜜臀av一区二区| 欧美又大又硬又粗bbbbb| 久久婷婷国产麻豆91| 日韩在线精品| 国产午夜精品一区二区三区 | 亚洲人成在线播放网站岛国| 久久99久久99精品蜜柚传媒| 丰满人妻一区二区三区无码av| 狠狠色综合播放一区二区| 性欧美激情精品| 欧美日韩综合一区二区| 国产精品二区不卡| 中文字幕综合在线| 日本成人免费在线观看| 国产乱码精品一区二区亚洲| 亚洲精品中文字| www.超碰97| 久久夜色电影| 日韩成人在线视频| 亚洲av无码一区二区三区网址| 日韩精品视频中文字幕| 日韩一二三区视频| 国产999免费视频| 91久久青草| 日韩一级精品视频在线观看| 一个人看的视频www| 精品视频在线观看免费观看| 欧美一区二区三区四区高清| 亚洲黄色片免费| 蜜桃精品一区二区三区| 91精品国产91久久久久久最新毛片| www.国产视频.com| 精品国产18久久久久久二百| 欧美一区二区三级| 国产精品果冻传媒| 欧美亚洲色图校园春色| 精品亚洲一区二区三区在线播放| 国产中文字幕一区二区| 色棕色天天综合网| 原创国产精品91| 老熟妇高潮一区二区三区| 66视频精品| 国内精品久久久| www.色国产| 麻豆精品国产91久久久久久| 91色中文字幕| 亚洲av无码一区二区乱子伦| 99久久久久久99| 日韩av电影免费在线观看| 色网站在线看| 亚洲一区二区三区四区在线观看| 久久久久久久久久久99| 亚洲一区二区三区四区| 91精品国产福利在线观看| 在线观看国产免费视频| 成人激情在线| 欧美黄色免费网站| 日韩av免费播放| 国产精品资源网| 草莓视频一区| 国产爆初菊在线观看免费视频网站 | 中出一区二区| 欧美在线亚洲在线| 国产女18毛片多18精品| 91丨porny丨首页| 一区二区三区国产福利| av免费不卡国产观看| 欧美日韩午夜在线视频| 日本少妇xxxx软件| 成人网18免费网站| 高清亚洲成在人网站天堂| 国产精品熟女视频| 成熟亚洲日本毛茸茸凸凹| 麻豆亚洲一区| 日本在线观看高清完整版| 一本色道久久加勒比精品| 久久6免费视频| 免费久久精品| 久久免费视频在线| 国产毛片一区二区三区va在线 | 国产精品久久久免费看| 亚洲激情黄色| 91网在线免费观看| 成年人在线观看| 亚洲自拍偷拍综合| 91福利免费观看| 欧美**字幕| 欧美劲爆第一页| 又污又黄的网站| 久久综合一区二区| 亚洲理论电影在线观看| 色婷婷成人网| 国产一区二区三区视频| 青青青国产在线 | 欧美精品aⅴ在线视频| 亚洲成人日韩在线| 激情久久五月| 99久久精品免费看国产四区| 蜜芽在线免费观看| 精品1区2区3区| 免费网站在线高清观看| 国产精品一卡| 久久草视频在线看| 成年人视频免费在线播放| 日韩欧美你懂的| 欧美爱爱免费视频| 国产一区二区中文字幕| 亚洲一区二区三区精品动漫| 女生影院久久| 亚洲午夜激情免费视频| 久久精品五月天| 久久久久久久久99精品| 92看片淫黄大片一级| 日韩在线黄色| 日本国产高清不卡| 国产精品视频一区二区久久| 欧美在线小视频| 日韩丰满少妇无码内射| 日本最新不卡在线| 亚洲精美视频| 国产成年精品| 久久99视频精品| 色欲久久久天天天综合网| 精品二区三区线观看| 欧美亚一区二区三区| 视频在线观看一区二区三区| 日韩精品极品视频在线观看免费| 忘忧草在线www成人影院| 国产一区二区三区在线| 中文字幕你懂的| 亚洲乱码日产精品bd| 女人扒开腿免费视频app| 伊人久久亚洲美女图片| 欧美激情导航| 欧美黄页免费| 欧美另类交人妖| 欧洲精品久久一区二区| 欧美午夜影院在线视频| 久久久久久成人网| 国产精品资源在线| 久久精品免费一区二区| 日本一区二区免费高清| 亚洲综合自拍一区| 日韩电影免费看| 色婷婷综合久久久久| 国产成人精品免费看视频| 天天影视涩香欲综合网| 亚洲天堂岛国片| 国产成人精品www牛牛影视| 国产中文字幕视频在线观看| 日韩欧美三级| 国产69精品久久久久9999apgf | 日本精品一区二区三区在线播放| 欧美一区二区三区视频在线| 欧美精品二区三区| 一区二区中文视频| 三级男人添奶爽爽爽视频| 美国毛片一区二区三区| 欧美精品久久久久久久自慰| 国产探花在线精品一区二区| 999热视频在线观看| 男人最爱成人网| 欧美黄色小视频| 成年网站在线| 亚洲成人教育av| 一区两区小视频| 性做久久久久久久免费看| 天天色天天综合| 91免费小视频| 亚洲熟女乱综合一区二区| 欧美综合国产| 成人免费在线网| 色偷偷综合网| 久久综合中文色婷婷| 久久亚洲精精品中文字幕| 国产91网红主播在线观看| 亚洲国产精品精华素| 在线国产精品视频| 三级视频在线| 欧美成人欧美edvon| 亚洲中文字幕一区二区| 欧美性猛交xxxx乱大交蜜桃 | 欧美日韩中文字幕综合视频| 日本青青草视频| 国产精品美女久久久久av爽李琼 | 69精品小视频| 色呦呦呦在线观看| 久久精品视频在线| 国产视频第一页在线观看| 亚洲福利在线播放| 亚洲a视频在线| 91精品国产色综合久久久蜜香臀| 日批视频免费在线观看| 五月婷婷综合网| 免看一级a毛片一片成人不卡| 中文字幕一区二区视频| 国产又粗又猛又爽又黄av| 99久精品国产| 黄色免费看视频| 99精品在线免费| 天堂www中文在线资源| 粉嫩13p一区二区三区| 天天干天天曰天天操| 精品无码三级在线观看视频 | 777午夜精品电影免费看| 青青精品视频播放| 中文在线最新版地址| 国产91精品久久久久久| 欧美亚洲日本精品| 日本国产精品视频| 欧美影视资讯| 国产狼人综合免费视频| 69堂精品视频在线播放| 国产欧美日韩中文字幕| 欧美国产视频| 亚洲最大福利视频网站| 日韩三级不卡| 国产成人免费电影| 日本成人7777| 欧美日韩在线高清| 精品久久成人| 黄瓜视频免费观看在线观看www | 日韩爱爱小视频| 看片的网站亚洲| 男人午夜视频在线观看| 国产福利一区二区三区视频在线| 亚洲欧美日韩中文字幕在线观看| 国产成人精品一区二区三区网站观看| 特黄特黄一级片| 成人午夜又粗又硬又大| 熟女人妻在线视频| 日本一区二区三区久久久久久久久不| 中文字幕av久久爽一区| 国产精品国模大尺度视频| 欧产日产国产v| 午夜视频在线观看一区二区 | 91精品国产91久久综合桃花 | 中文字幕亚洲一区在线观看| 麻豆tv入口在线看| 午夜剧场成人观在线视频免费观看| 欧美一级鲁丝片| 国产精品免费久久久| 在线免费观看亚洲| 国产一区国产精品| 欧美亚洲国产激情| 国产亚洲精品久久久久久久| 亚洲精品专区| 久久99爱视频| 成人va在线观看| 精品无码国产污污污免费网站| 成人欧美一区二区三区黑人麻豆| 久久久久久久国产精品毛片| 欧美午夜性色大片在线观看| 国产精品毛片久久久久久久av| 亚洲成人黄色网| av在线免费观看网| 久久久久久久久久久网站| 欧美在线va视频| 444亚洲人体| 国产一区二区三区电影在线观看 | 久久99热狠狠色一区二区| 四虎成人免费视频| 亚洲国产精品成人综合色在线婷婷| 亚洲成人生活片| 欧美午夜片欧美片在线观看| 国产av无码专区亚洲a∨毛片| 国产婷婷成人久久av免费高清| 理论片午午伦夜理片在线播放| 91成人在线观看国产| 免费看一区二区三区| 日韩久久久久久久| 亚洲视屏一区| 不卡的在线视频| 久久久久国色av免费看影院| 久久久久久久久久久网| 欧美日韩你懂的| 九色视频网站在线观看| 久久久久久久久亚洲| av日韩久久| 亚洲高清视频一区二区| 亚洲全部视频| 91精品国产高清91久久久久久| 亚洲国产精品高清| 日本丰满少妇做爰爽爽| 亚洲毛片在线观看| 国产直播在线| 国产v亚洲v天堂无码| 亚洲经典一区| 特级西西444www| 国产精品久久三区| 中文字幕男人天堂| 中文字幕精品网| 中文.日本.精品| 秋霞在线观看一区二区三区| 免费在线观看成人av| 91视频啊啊啊| 亚洲不卡在线观看| 色婷婷av一区二区三区之e本道| 欧美超级乱淫片喷水| 国产精品2区| 日本在线视频www色| 国产制服丝袜一区| 精品一区在线观看视频| 欧美精品久久一区| 黄色一级片在线观看| 国产乱肥老妇国产一区二| 91久久高清国语自产拍| 在线能看的av网站| 一区二区三区蜜桃网| 国产丰满美女做爰| 久久久久久com| 国产精品一线| 国产美女无遮挡网站| 久久人人爽人人爽| 久久国产香蕉视频| 日韩在线小视频| 高清久久一区| 国产又粗又猛又爽又黄的网站| 国产91精品一区二区麻豆亚洲| 久久久久久久国产视频| 亚洲精品美女免费| 日韩美女在线看免费观看| 日本在线观看一区二区三区| 免费在线观看精品| 久久久久久视频| 精品国产网站在线观看| 成人观看网址| 欧美日韩亚洲一区二区三区四区| 日韩精品亚洲专区| 四虎地址8848| 精品国产一区二区亚洲人成毛片| 黄色在线网站噜噜噜| 亚洲电影免费| 懂色中文一区二区在线播放| 久久久久久久久久久久久久av| 国产午夜精品全部视频播放| 国产精品一级在线观看| koreanbj精品视频一区| 久久精品夜色噜噜亚洲a∨| 91国内精品视频| 欧美激情综合亚洲一二区| 亚洲调教一区| 日韩av片免费观看| 欧美日韩中文字幕| 国产福利视频在线| 久久视频在线观看中文字幕| 美女网站色91| 五月天婷婷网站| 中文在线不卡视频| 国产日韩三级| www.精品在线| 天天综合天天做天天综合| 超碰免费97在线观看| 国产成人成网站在线播放青青| 日韩国产精品91| 国产一级做a爱免费视频| 亚洲午夜精品久久久久久久久久久久| 国产在线不卡一区二区三区| 成年人黄色片视频| 一区二区三区四区在线免费观看 | www.涩涩涩| 亚洲国产一区在线观看| 9i精品一二三区| 精品久久精品久久| 精品一区免费av| 久久久精品视频网站| 欧美激情影音先锋| 97国产精品| 亚洲自拍偷拍图| 亚洲精品二三区|