成人精品水蜜桃_成人在线丰满少妇av_91亚洲国产高清_欧美日韩免费区域视频在线观看

首頁 資訊 > 資訊 > 正文

memcached使用中踩的一些坑 每日信息

背景

線上啟用memcached(以下簡稱mc)作為熱點緩存組件已經(jīng)多年,其穩(wěn)定性和性能都經(jīng)歷住了考驗,這里記錄一下踩過的幾個坑。

大key存儲

某年某月某日,觀察mysql的讀庫CPU占比有些異常偏高,去check慢查詢log,發(fā)現(xiàn)部分應(yīng)有緩存的慢sql居然存在幾秒執(zhí)行一次情況,不符合緩存數(shù)小時的代碼邏輯。查看業(yè)務(wù)log在每次查詢sql之后也確實有將結(jié)果set至mc之中:

# python代碼mc.set(cache_key, v, 3600)

而set返回的取值卻是False而非正常的True,很快想到mc著名的只可存儲不超過1MB大小的key限制,在以往的業(yè)務(wù)場景中沒有出現(xiàn)過這么大的key,所以一直沒達到過這個限制,直到這一次撞上。要解決超過1MB大小的key存儲問題有以下幾個思路:


【資料圖】

想辦法將cache結(jié)果變小換個cache組件mc >=1.4.2 版本其實已經(jīng)支持命令行參數(shù)-I指定最大key大小了,線上使用版本支持最小1KB最大128MB的設(shè)置將大key拆分為幾個子key,通過set_multi和get_multi實現(xiàn)統(tǒng)一的讀寫。

無論是通過2或3都可以支持更大的key存儲,但是更大的key存儲對于讀寫傳輸其實都更不友好,而思路4需要手動拆分、組裝子key略顯麻煩,所以優(yōu)先從思路1著手,意外發(fā)現(xiàn)python使用的memcached庫其實提供了key壓縮功能,在寫入時指定min_compress_len參數(shù)即可:

mc.set(key, v, time=expires, min_compress_len=1024)

如上表示寫入的v對象序列化大小若>=1024則啟用壓縮存儲,庫底層會將其壓縮后再寫入mc,讀取時庫底層也會自動解壓縮后再返回,業(yè)務(wù)層可以說完全無感,并且壓縮后還能極大降低存儲和傳輸成本。最終通過min_compress_len參數(shù)啟用大key壓縮后,原1MB大小的key直瘦身了4/5。

slab鈣化

啟用大key壓縮后mc度過了好一段歲月靜好的日子,直到某一天...

大規(guī)模key分布變動導致的鈣化

查看zabbix上的相關(guān)監(jiān)控,發(fā)現(xiàn)mc的key查詢miss比例居然接近50%!這個緩存命中率著實讓人深思,進一步check后發(fā)現(xiàn)同時異常的指標還有evicted items數(shù),日常取值居然可以達到數(shù)百/S的級別。mc官方文檔對evicted items的定義如下:

evicted                Number of times an item had to be evicted from the LRU before it expired.

即存儲的key在其實際過期前被從LRU強制清理了,這一般說明mc剩余可分配內(nèi)存不足了,所以新key寫入時只能先從LRU淘汰一部分key騰出空間后再給新key使用,但是查看mc的內(nèi)存使用率,明明還有超過>2GB的剩余內(nèi)存可用。最終調(diào)查后真相大白:mc明明剩余大量內(nèi)存可用,寫入新key卻不斷導致舊key被提前清除的現(xiàn)象其實是mc特有的slab鈣化問題所致:

Memcached采用LRU(Least Recent Used)淘汰算法,在內(nèi)存容量滿時踢出過期失效和LRU數(shù)據(jù),為新數(shù)據(jù)騰出內(nèi)存空間。不過該淘汰算法在內(nèi)存空間不足以分配新的Slab情況下,這時只會在同一類Slab內(nèi)部踢出數(shù)據(jù)。即當某個Slab容量滿,且不能在內(nèi)存足夠分配新的Slab,只會在相同Slab內(nèi)部踢出數(shù)據(jù),而不會挪用或者踢出其他Slab的數(shù)據(jù)。這種局部剔除數(shù)據(jù)的淘汰算法帶來一個問題:Slab鈣化。

簡單來說memcached 使用的不同尺寸slab一旦分配完成就不可變了,所以如果某類slab已用盡,即便其他slab剩余大量空閑內(nèi)存也無法再對其加以利用。業(yè)務(wù)這邊之前對使用mc的部分緩存key進行了整合優(yōu)化,在優(yōu)化之前單mc的全部5GB內(nèi)存均已根據(jù)key存儲情況分配給了特定的slab,而優(yōu)化之后大大降低了小key的數(shù)量,取而代之的是相對更緊湊的大key,key的數(shù)量和大小分布都發(fā)生了顯著的變化,于是原有的適用于大量小key的slab分配就無法滿足優(yōu)化后的key存儲了。最終體現(xiàn)為,中等大小的slab內(nèi)存已被耗盡,每次寫入新key只能先通過LRU淘汰部分舊key騰出空間,體現(xiàn)為evicted數(shù)異常偏高,并且直接影響了緩存命中率,而小尺寸的slab卻長期大量空閑,體現(xiàn)為mc內(nèi)存使用剩余空間一直充足。網(wǎng)上檢索解決鈣化問題有三個辦法:

1) 重啟Memcached實例,簡單粗暴,啟動后重新分配Slab class,但是如果是單點可能造成大量請求訪問數(shù)據(jù)庫,出現(xiàn)雪崩現(xiàn)象,沖跨數(shù)據(jù)庫。2) 隨機過期:過期淘汰策略也支持淘汰其他slab class的數(shù)據(jù),twitter工程師采用隨機選擇一個Slab,釋放該Slab的所有緩存數(shù)據(jù),然后重新建立一個合適的Slab。3) 通過slab_reassign、slab_authmove參數(shù)控制。

方法2看上去應(yīng)是twitter的定制版mc Twemcache的特有功能,方法3則是線上mc已支持的方案,但首次接觸也不敢貿(mào)然直接在線上使用。考慮到mc僅作為熱點緩存其數(shù)據(jù)可丟失,且部署有多臺分攤壓力,直接采用低峰時段分別重啟單個mc的策略解決,重啟后evicted item直接降為0,cache命中率升至90%上下。

少量大key變動導致的鈣化

首次鈣化之后又是一段歲月靜好,直到...某段時間開始一個主要接口偶發(fā)耗時會突然飆升一下,對應(yīng)機器的CPU使用也會瞬間飚高一小陣,查看zabbix監(jiān)控時,發(fā)現(xiàn)mc的 evicted items>0已持續(xù)好一段時間,但一直是個位數(shù)/S的級別,看著影響不大。進一步執(zhí)行stats items命令,發(fā)現(xiàn)發(fā)生key evict的是最大的chunk_size=1048576 的slab 42,這也就是說存在大小在512KB~1MB之間的大key,同時當前mc分配的1MB slab個數(shù)已無法滿足其存儲,也無法再分配出新的1MB大小的slab,最終體現(xiàn)為對于大key的再次鈣化。由于slab鈣化大key會被頻繁evict,對應(yīng)緩存機制基本失效,所幸server端針對該類大key的讀取還做了一個短期的本地cache,避免了每次請求都穿透到db。在某些特定時刻,當mc中對應(yīng)大key失效且本地cache失效,對應(yīng)請求又較多的時候,多個獨立的請求都會穿透到db獲取數(shù)據(jù),而后再寫入mc,無論是穿透到db獲取數(shù)據(jù)后本地進行相應(yīng)的數(shù)據(jù)組裝處理邏輯,還是讀寫mc的壓縮、解壓縮數(shù)據(jù)操作,都比較耗CPU,最終會體現(xiàn)為api耗時增加,且CPU使用率也存在飚高的現(xiàn)象。近期并沒有涉及大key讀寫的改動,那這次的大key slab鈣化又是怎么來的?進一步探查原因:觸發(fā)evict的大key近期確實無相關(guān)邏輯改動,但該部分舊key的大小和運營放出的資源多少直接相關(guān),近一段時間放出的資源一直持續(xù)增加,舊key原本大小是<512KB,所以使用的是512KB的slab 41,近期持續(xù)增大為>512KB后,就只能使用1MB的slab 42存儲了,對于slab 42來說相當于在原有支持的大key數(shù)量基礎(chǔ)上又新的大key存儲需要支持,又由于slab鈣化無法再分配新的slab 42,最終觸發(fā)evict,cache命中率降低,api偶發(fā)耗時上升。最終解決方案:還是在業(yè)務(wù)低峰期逐個重啟mc,觸發(fā)slab重分配即可。

總結(jié)

memcached作為一個開源的純內(nèi)存kv緩存組件,上手簡單、性能、穩(wěn)定性都有足夠保證,但是實際使用時也不可掉以輕心,對其相關(guān)監(jiān)控與關(guān)注不能少,對于其特有的最大key存儲限制、slab鈣化問題要有一定的認識并能及時處理。轉(zhuǎn)載請注明出處,原文地址:https://www.cnblogs.com/AcAc-t/p/memcached_large_key_slab_calcification.html

參考

https://github.com/memcached/memcached/blob/master/doc/protocol.txt#L637https://github.com/memcached/memcached/wiki/ReleaseNotes142#configurable-maximum-item-sizehttps://www.jianshu.com/p/b91a45711460https://blog.twitter.com/engineering/en_us/a/2012/caching-with-twemcachehttps://www.cnblogs.com/AcAc-t/p/memcached_large_key_slab_calcification.htmlhttps://bugwz.com/2020/05/24/memcached-slab-calcification/#2-2-2、Rebalance執(zhí)行邏輯https://www.cnblogs.com/Leo_wl/p/3310294.html

關(guān)鍵詞:

最近更新

關(guān)于本站 管理團隊 版權(quán)申明 網(wǎng)站地圖 聯(lián)系合作 招聘信息

Copyright © 2005-2023 創(chuàng)投網(wǎng) - m.7778890.com All rights reserved
聯(lián)系我們:39 60 29 14 2@qq.com
皖I(lǐng)CP備2022009963號-3

成人精品水蜜桃_成人在线丰满少妇av_91亚洲国产高清_欧美日韩免费区域视频在线观看
亚洲一区二区三区中文字幕在线| 亚洲欧美日韩国产| 五月天视频一区| 日韩亚洲欧美在线观看| 在线视频成人| 国产综合色精品一区二区三区| 欧美极品美女视频| 在线观看日韩高清av| 欧美 日韩 国产一区二区在线视频| 日韩中文字幕麻豆| 国产色综合久久| 欧美性淫爽ww久久久久无| 欧美区一区二| 国产精品888| 亚洲最新在线观看| 久久久蜜桃精品| 在线视频国内自拍亚洲视频| 国产精品国产亚洲精品看不卡15| 蜜臀va亚洲va欧美va天堂| 中文字幕亚洲综合久久菠萝蜜| 欧美精品日日鲁夜夜添| 一区二区三区久久网| 91在线精品一区二区| 麻豆中文一区二区| 夜夜亚洲天天久久| 中文字幕欧美三区| 欧美成人综合网站| 欧美亚洲日本一区| 国产精品五区| 欧美特黄一级| www.亚洲人| 国内精品久久久久影院一蜜桃| 亚洲一区二区三区中文字幕| 欧美激情一区三区| 精品毛片乱码1区2区3区 | 国产午夜精品理论片a级大结局 | 欧美va亚洲va| 欧美日韩午夜在线视频| 亚洲一区二区网站| 红桃视频欧美| 91一区在线观看| 丁香六月综合激情| 国产在线国偷精品免费看| 天堂精品中文字幕在线| 一区二区三区在线观看欧美| 国产精品卡一卡二卡三| 久久亚洲二区三区| 欧美一级欧美三级在线观看| 欧美色老头old∨ideo| 久久黄色小说| 午夜亚洲福利在线老司机| 国语自产精品视频在线看抢先版结局| 从欧美一区二区三区| 国产福利精品导航| 激情综合网天天干| 蜜桃一区二区三区在线观看| 天堂一区二区在线免费观看| 亚洲一二三区不卡| 亚洲综合偷拍欧美一区色| 日韩一区欧美小说| 综合久久久久综合| 亚洲手机成人高清视频| 成人免费小视频| ㊣最新国产の精品bt伙计久久| 中文字幕+乱码+中文字幕一区| 国产午夜三级一区二区三| 久久综合五月天婷婷伊人| 欧美v国产在线一区二区三区| 欧美一区二区三区在| 91精品国产福利在线观看| 91麻豆精品国产91久久久使用方法 | 久久精彩视频| 久久视频一区| 在线观看日韩电影| 欧美日韩在线免费视频| 3d动漫精品啪啪1区2区免费 | 韩日在线一区| 一区二区三区中文免费| 国产精品久久久久久久久搜平片| 中文乱码免费一区二区| 亚洲三级电影网站| 亚洲一区二区三区国产| 五月天丁香久久| 久久精品国产亚洲a| 国产精品综合二区| 99久久99久久综合| 欧美日韩亚洲免费| 一本久道综合久久精品| 久久国产手机看片| 欧美日韩黄视频| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 欧美色成人综合| 日韩午夜精品电影| 欧美激情艳妇裸体舞| 亚洲免费在线观看视频| 亚洲h动漫在线| 国产一区三区三区| 97精品电影院| 一区二区日本视频| 在线观看日韩av先锋影音电影院| 91精品久久久久久久91蜜桃| 26uuu国产一区二区三区| 国产精品久久久久aaaa樱花| 亚洲黄一区二区三区| 免费观看91视频大全| 丰满少妇在线播放bd日韩电影| 欧美黄免费看| 先锋影音国产精品| 欧美精品自拍偷拍| 国产免费观看久久| 亚洲一区二区欧美日韩 | 99久久免费视频.com| 亚洲精品一区二区三区樱花| 欧洲一区二区av| 久久影院视频免费| 亚洲一区二区三区影院| 国产精品一区二区视频| 欧美 日韩 国产在线 | 欧美精品v国产精品v日韩精品| 国产午夜亚洲精品理论片色戒 | 亚洲欧美日本日韩| 日韩免费一区二区三区在线播放| 中文字幕日本不卡| 久久精品国产精品亚洲精品| 91丝袜呻吟高潮美腿白嫩在线观看| 99riav国产精品| 678五月天丁香亚洲综合网| 国产精品免费观看视频| 蜜臀av性久久久久av蜜臀妖精| 色综合色狠狠综合色| 91久久奴性调教| 中文av一区二区| 久久99国产精品久久99| 红桃视频国产一区| 7777精品伊人久久久大香线蕉的| 中文字幕制服丝袜一区二区三区| 另类小说欧美激情| 亚洲国产一区二区三区在线播 | 亚洲成av人片www| 99久久er热在这里只有精品66| 久久久久一区| 久久久.com| 精品无人区卡一卡二卡三乱码免费卡| 欧美三日本三级少妇三99| 欧美日韩国产一级片| 最新高清无码专区| 成人av手机在线观看| 久久久久久穴| 国产精品久久久久久久久免费丝袜| 美国三级日本三级久久99| 亚洲视频狠狠| 67194成人在线观看| 亚洲综合免费观看高清在线观看| 亚洲美女偷拍久久| 高清成人在线观看| 日本韩国精品在线| 中文字幕乱码日本亚洲一区二区| 精品写真视频在线观看| 国产九九精品| www亚洲一区| 国产麻豆成人传媒免费观看| 在线播放日韩| 国产日产亚洲精品系列| 国产精品中文字幕日韩精品| 亚洲精品美女| 国产网站一区二区| 精品一区二区三区在线播放视频| 一区二区精品| 国产精品电影一区二区| 国产精一区二区三区| 久久综合狠狠| 综合色中文字幕| 欧美1区3d| 久久综合国产精品| 看电视剧不卡顿的网站| 亚洲一区二区在| 欧美xxxxxxxx| 国产成人精品综合在线观看 | 麻豆91小视频| 久久亚洲电影| 亚洲国产精品一区二区尤物区| 欧美在线视频二区| 精品久久久久久久久久久院品网| 日本不卡123| 久久久夜夜夜| 香蕉av福利精品导航| 欧美午夜一区| 久久精品视频一区二区| 日韩国产高清在线| 午夜亚洲性色福利视频| 一区二区三区在线免费观看| 欧美在线二区| 国产女人aaa级久久久级 | 久久精品99国产国产精| 在线日韩一区二区| 亚洲电影第三页| 美女日韩在线中文字幕| 久久精品日产第一区二区三区高清版 | 国产精品一区在线播放| 国产欧美日韩综合精品一区二区|