日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

memcached使用中避坑實例匯總

瀏覽:42日期:2022-06-14 08:05:09
目錄背景大key存儲slab鈣化大規(guī)模key分布變動導致的鈣化少量大key變動導致的鈣化總結參考背景

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

大key存儲

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

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

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

要解決超過1MB大小的key存儲問題有以下幾個思路:

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

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

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

如上表示寫入的v對象序列化大小若>=1024則啟用壓縮存儲,庫底層會將其壓縮后再寫入mc,讀取時庫底層也會自動解壓縮后再返回,業(yè)務層可以說完全無感,并且壓縮后還能極大降低存儲和傳輸成本。

最終通過min_compress_len參數啟用大key壓縮后,原1MB大小的key直瘦身了4/5。

slab鈣化

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

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

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

mc官方文檔對evicted items的定義如下:

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

即存儲的key在其實際過期前被從LRU強制清理了,這一般說明mc剩余可分配內存不足了,所以新key寫入時只能先從LRU淘汰一部分key騰出空間后再給新key使用,但是查看mc的內存使用率,明明還有超過>2GB的剩余內存可用。

最終調查后真相大白:mc明明剩余大量內存可用,寫入新key卻不斷導致舊key被提前清除的現象其實是mc特有的slab鈣化問題所致:

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

簡單來說memcached 使用的不同尺寸slab一旦分配完成就不可變了,所以如果某類slab已用盡,即便其他slab剩余大量空閑內存也無法再對其加以利用。

業(yè)務這邊之前對使用mc的部分緩存key進行了整合優(yōu)化,在優(yōu)化之前單mc的全部5GB內存均已根據key存儲情況分配給了特定的slab,而優(yōu)化之后大大降低了小key的數量,取而代之的是相對更緊湊的大key,key的數量和大小分布都發(fā)生了顯著的變化,于是原有的適用于大量小key的slab分配就無法滿足優(yōu)化后的key存儲了。

最終體現為,中等大小的slab內存已被耗盡,每次寫入新key只能先通過LRU淘汰部分舊key騰出空間,體現為evicted數異常偏高,并且直接影響了緩存命中率,而小尺寸的slab卻長期大量空閑,體現為mc內存使用剩余空間一直充足。

網上檢索解決鈣化問題有三個辦法:

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

方法2看上去應是twitter的定制版mc Twemcache的特有功能,方法3則是線上mc已支持的方案,但首次接觸也不敢貿然直接在線上使用。

考慮到mc僅作為熱點緩存其數據可丟失,且部署有多臺分攤壓力,直接采用低峰時段分別重啟單個mc的策略解決,重啟后evicted item直接降為0,cache命中率升至90%上下。

少量大key變動導致的鈣化

首次鈣化之后又是一段歲月靜好,直到...

某段時間開始一個主要接口偶發(fā)耗時會突然飆升一下,對應機器的CPU使用也會瞬間飚高一小陣,查看zabbix監(jiān)控時,發(fā)現mc的 evicted items>0已持續(xù)好一段時間,但一直是個位數/S的級別,看著影響不大。

進一步執(zhí)行stats items命令,發(fā)現發(fā)生key evict的是最大的chunk_size=1048576 的slab 42,這也就是說存在大小在512KB~1MB之間的大key,同時當前mc分配的1MB slab個數已無法滿足其存儲,也無法再分配出新的1MB大小的slab,最終體現為對于大key的再次鈣化。

由于slab鈣化大key會被頻繁evict,對應緩存機制基本失效,所幸server端針對該類大key的讀取還做了一個短期的本地cache,避免了每次請求都穿透到db。

在某些特定時刻,當mc中對應大key失效且本地cache失效,對應請求又較多的時候,多個獨立的請求都會穿透到db獲取數據,而后再寫入mc,無論是穿透到db獲取數據后本地進行相應的數據組裝處理邏輯,還是讀寫mc的壓縮、解壓縮數據操作,都比較耗CPU,最終會體現為api耗時增加,且CPU使用率也存在飚高的現象。

近期并沒有涉及大key讀寫的改動,那這次的大key slab鈣化又是怎么來的?進一步探查原因:觸發(fā)evict的大key近期確實無相關邏輯改動,但該部分舊key的大小和運營放出的資源多少直接相關,近一段時間放出的資源一直持續(xù)增加,舊key原本大小是<512KB,所以使用的是512KB的slab 41,近期持續(xù)增大為>512KB后,就只能使用1MB的slab 42存儲了,對于slab 42來說相當于在原有支持的大key數量基礎上又新的大key存儲需要支持,又由于slab鈣化無法再分配新的slab 42,最終觸發(fā)evict,cache命中率降低,api偶發(fā)耗時上升。

最終解決方案:還是在業(yè)務低峰期逐個重啟mc,觸發(fā)slab重分配即可。

總結

memcached作為一個開源的純內存kv緩存組件,上手簡單、性能、穩(wěn)定性都有足夠保證,但是實際使用時也不可掉以輕心,對其相關監(jiān)控與關注不能少,對于其特有的最大key存儲限制、slab鈣化問題要有一定的認識并能及時處理。

參考

https://github.com/memcached/memcached/blob/master/doc/protocol.txt#L637

https://github.com/memcached/memcached/wiki/ReleaseNotes142#configurable-maximum-item-size

https://www.jianshu.com/p/b91a45711460

https://blog.twitter.com/engineering/en_us/a/2012/caching-with-twemcache

https://www.cnblogs.com/AcAc-t/p/memcached_large_key_slab_calcification.html

https://bugwz.com/2020/05/24/memcached-slab-calcification/#2-2-2、Rebalance執(zhí)行邏輯

https://www.cnblogs.com/Leo_wl/p/3310294.html

到此這篇關于memcached使用中避坑實例匯總的文章就介紹到這了,更多相關memcached 踩的一些坑內容請搜索好吧啦網以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: PHP
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品蜜月aⅴ在线| 国产精品1区在线| 久久爱www.| 91中文字幕精品永久在线| 精品国产不卡| 国产成人久久精品麻豆二区| 国产成人精品一区二区免费看京| 国产精品视频一区二区三区综合 | 美女亚洲一区| 国产精品婷婷| 日本aⅴ免费视频一区二区三区| 日本综合精品一区| 免费一级欧美片在线观看网站| 精品成av人一区二区三区 | 欧美亚洲tv| 国产精品精品| 日韩午夜黄色| 国产乱码精品| 99久久久久| 国产欧美一区| 美女在线视频一区| 亚洲女同中文字幕| 欧美亚洲一区二区三区| 日韩中文在线电影| 热久久久久久久| 国产一区二区三区探花| 99国产精品久久久久久久| 国产美女撒尿一区二区| 激情欧美一区二区三区| 国产精品66| 热久久国产精品| 欧美国产小视频| 日韩动漫一区| 亚洲激情av| av在线最新| 视频一区日韩精品| 久久国产欧美| 久久影院资源站| 日韩国产欧美一区二区三区| 99精品在线| 正在播放日韩精品| 九九九精品视频| 欧美偷窥清纯综合图区| 日韩午夜免费| 伊人精品一区| 色爱综合网欧美| 国产精品一区二区中文字幕| 免费一区二区视频| 午夜欧美精品| 欧美jjzz| 国产一区二区久久久久| 国产视频一区二区在线播放| 男人的天堂久久精品| 99国产精品自拍| 伊人成人网在线看| 欧美/亚洲一区| 国产韩日影视精品| 午夜久久免费观看| 久久麻豆精品| 欧美日韩国产一区二区三区不卡 | 国产精选在线| 国产一区国产二区国产三区| 日韩精品一区二区三区中文在线| 久久高清国产| 日韩不卡一区二区| 日韩高清国产一区在线| 日韩高清一级| 国产精品亚洲欧美一级在线| 国产精区一区二区| 日韩a一区二区| 亚洲91久久| 亚洲欧美日韩国产| 一本综合精品| 国产精品九九| 亚洲精品88| 亚洲免费中文| 国产精品久久久久久久久久久久久久久 | 欧美亚洲三级| 国产精品99一区二区三区| 欧美男人天堂| 亚洲日本在线观看视频| 国产精品不卡| 成人亚洲一区二区| 蜜臀av免费一区二区三区| 亚洲综合婷婷| 久久不见久久见中文字幕免费| 国产一区二区三区四区五区传媒| 日韩精品网站| 亚洲精品极品| 色爱综合网欧美| 免费人成黄页网站在线一区二区| 蜜桃久久av一区| 国产不卡精品| 一二三区精品| 天堂中文在线播放| 日韩国产在线观看一区| 色爱综合av| 国产无遮挡裸体免费久久| 亚洲va中文在线播放免费| 国产视频一区三区| 精品视频自拍| 日韩区一区二| 好看的亚洲午夜视频在线| 精品国产亚洲一区二区在线观看| 一区在线免费观看| 日本蜜桃在线观看视频| 日本午夜精品久久久久| 黄色亚洲大片免费在线观看| 国内一区二区三区| 国产精品网在线观看| 蜜臀va亚洲va欧美va天堂| 日韩深夜视频| 国产精品一区二区免费福利视频| 亚洲免费观看| 91欧美日韩| 精品久久网站| 国产欧美精品久久| 日韩精品欧美成人高清一区二区| aa亚洲婷婷| 人人爽香蕉精品| 在线亚洲激情| 亚洲综合二区| 日韩中文字幕亚洲一区二区va在线| 亚洲91视频| 亚洲二区在线| 999国产精品999久久久久久| 欧美激情另类| 日韩成人亚洲| 99久久精品网| 91精品啪在线观看国产18| 久久久久久久欧美精品| 欧美日韩在线二区| 日韩av一级| 精品一区免费| 视频一区二区欧美| 亚洲精品女人| 国产精品久久久久av蜜臀| 免费亚洲一区| 国产夫妻在线| 亚洲一级二级| 亚洲一级大片| 日本欧美韩国一区三区| 久久精品国产久精国产爱| 美女国产精品久久久| 国产96在线亚洲| 图片区亚洲欧美小说区| 国产精品美女| 欧美日韩在线二区| 色爱综合av| 日韩激情综合| 日韩专区精品| 亚洲精品一级| 精品国产aⅴ| 欧美日韩高清| 欧美精品99| 一区二区亚洲精品| 国产免费播放一区二区| 久久青草久久| 欧美日韩亚洲三区| 久久久久久免费视频| 日韩精品国产精品| 人人香蕉久久| 综合激情网...| 麻豆精品蜜桃| 国产精品一国产精品k频道56| 久久精品动漫| 国产日韩欧美一区二区三区 | 99久久精品费精品国产| 日韩精品免费视频人成| 久久中文字幕二区| 国产日产精品_国产精品毛片 | 国产亚洲第一伦理第一区| 欧美国产91| 国产传媒av在线| 国产精品亚洲人成在99www| 不卡在线一区二区| 日韩精品久久久久久久电影99爱 | 五月天久久久| 一本大道色婷婷在线| 91精品国产自产观看在线| 亚洲欧洲另类| 99久久婷婷这里只有精品| 国产精品mv在线观看| 亚洲综合图色| 蜜臀久久久久久久| 国产成人精品一区二区三区在线| 日韩精品免费观看视频| 亚洲色图国产| 日韩 欧美一区二区三区| 国产毛片久久| 美国欧美日韩国产在线播放| 欧美国产91| 尤物精品在线| 免费看日韩精品| 日本aⅴ亚洲精品中文乱码| 日本成人在线视频网站| 亚州精品视频| 日韩精品欧美大片| 国产欧美午夜| 国产精品亚洲四区在线观看 |