[Memcached] 為什么MC達到90%的內(nèi)存利用率時開始踢出數(shù)據(jù)许昨?

如圖1所示尿背,當往Memcached寫入500萬的160 Bytes的數(shù)據(jù)項茴晋,內(nèi)存利用率計算:59485199(bytes)/67108864(limit_maxbytes)=89%烁涌。內(nèi)存利用率達到89%時抒钱,從evictions看到MC主動踢出很多緩存數(shù)據(jù)早芭,為什么MC達到90%的內(nèi)存利用率時開始踢出緩存數(shù)據(jù)?

圖1 Memcached stats結(jié)果

要分析原因刀荒,我們首先要了解下Slab Allocation機制,可參考理解memcached的內(nèi)存存儲

從圖2 growth factor=1.25的Slab Allocation看到拱绑,160 Bytes的數(shù)據(jù)項選擇192 Bytes的chunk,浪費32 Bytes內(nèi)存虾啦。雖然Slab Allocation解決了malloc/free固有的內(nèi)存碎片問題丁眼,卻不能有效利用分配到的內(nèi)存。

圖2 Slab Allocation的 chunk 空間分配

我們計算每個chunk的期望內(nèi)存利用率:

120B的chunk放置的數(shù)據(jù)項期望長度是(96+120)/2=108,期望的內(nèi)存利用率為108/120=90%;

152B的chunk放置的數(shù)據(jù)項期望長度是(120+152)/2=136,期望的內(nèi)存利用率為136/152=89%;

......

n B的chunk放置的數(shù)據(jù)項期望長度是(n/1.25+n)/2=9n/10摘盆,期望的內(nèi)存利用率為9n/10/n=90%;

所以狈邑,內(nèi)存利用率到90%就意味growth factor=1.25的MC內(nèi)存已經(jīng)放滿數(shù)據(jù)赤炒,在沒有過期數(shù)據(jù)的情況下,保存新數(shù)據(jù)只能淘汰LRU(Least Recent Used)的數(shù)據(jù)宴凉。

推廣到任意growth factor(gf)温治,n Bytes的chunk放置的數(shù)據(jù)項期望長度是(n/gf+n)/2=(1+gf)n/(2*gf)捏顺,期望的內(nèi)存利用率為(1+gf)/(2*gf)主巍,比如:

gf=1.25搞旭,期望的內(nèi)存利用率為90%;

gf=2,期望的內(nèi)存利用率為75%;

.......

極端情況具伍,gf=1啼肩,期望的內(nèi)存利用率為100%芬沉,但是growth factor必須大于1捎谨,否則會如圖3的報錯畏邢。

圖3 growth factor必須大于1

那是不是說growth factor接近1交煞,期望的內(nèi)存利用率就能接近100%素征?結(jié)果出人意料。

在分配64M內(nèi)存的MC中酥泛,growth factor=1.000001捶索,如圖4璃弄、圖5所示垦梆,1~199個Slab class的chunk size為96 Bytes托猩,第200個Slab class的chunk size為1MB印蓖。

圖4 growth factor=1.000001的Slab Allocation
圖5 growth factor=1.000001的Slab Allocation

當growth factor=1.000001,往64M內(nèi)存MC插入163 Bytes的數(shù)據(jù)項京腥,如圖6和圖7所示赦肃,內(nèi)存利用率:bytes(10432)/limit_maxbytes(67108864)=0.01%,趨近于0公浪。163 Bytes的數(shù)據(jù)項不能放入到96 Bytes的chunk他宛,只能放到slab class 200的64MB的chunk,幾乎浪費64M所有的空間欠气,總共寫入163 Bytes * 64=10432 Bytes的數(shù)據(jù)厅各。從這個例子看出,growth factor不能趨近與1预柒,否則內(nèi)存利用率趨近于0队塘。但是growth factor也不能太大,否則內(nèi)存利用率也會很低宜鸯。

實踐經(jīng)驗表明人灼,growth factor最好介于1.05~2之間,并且根據(jù)業(yè)務緩存數(shù)據(jù)塊大小而定顾翼。

圖6 stats結(jié)果
圖7 stats slab結(jié)果
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末投放,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子适贸,更是在濱河造成了極大的恐慌灸芳,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拜姿,死亡現(xiàn)場離奇詭異烙样,居然都是意外死亡,警方通過查閱死者的電腦和手機蕊肥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門谒获,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蛤肌,“玉大人,你說我怎么就攤上這事批狱÷阕迹” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵赔硫,是天一觀的道長炒俱。 經(jīng)常有香客問我,道長爪膊,這世上最難降的妖魔是什么权悟? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮推盛,結(jié)果婚禮上峦阁,老公的妹妹穿的比我還像新娘。我一直安慰自己耘成,他們只是感情好拇派,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凿跳,像睡著了一般件豌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上控嗜,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天茧彤,我揣著相機與錄音,去河邊找鬼疆栏。 笑死曾掂,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的壁顶。 我是一名探鬼主播珠洗,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼若专!你這毒婦竟也來了许蓖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤调衰,失蹤者是張志新(化名)和其女友劉穎膊爪,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嚎莉,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡米酬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了趋箩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赃额。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡加派,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出跳芳,到底是詐尸還是另有隱情芍锦,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布筛严,位于F島的核電站醉旦,受9級特大地震影響饶米,放射性物質(zhì)發(fā)生泄漏桨啃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一檬输、第九天 我趴在偏房一處隱蔽的房頂上張望照瘾。 院中可真熱鬧,春花似錦丧慈、人聲如沸析命。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鹃愤。三九已至,卻和暖如春完域,著一層夾襖步出監(jiān)牢的瞬間软吐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工吟税, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留凹耙,地道東北人。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓肠仪,卻偏偏與公主長得像肖抱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子异旧,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

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