思路
- 提高內(nèi)存命中率
- 減少內(nèi)存浪費(fèi)
- 增加內(nèi)存重復(fù)利用率
輔助調(diào)優(yōu)命令
- Stats命令:查看服務(wù)器的運(yùn)行狀態(tài)和內(nèi)部數(shù)據(jù)
- Stats settings:查看服務(wù)器設(shè)置
參數(shù) | 參數(shù)作用 |
---|---|
maxbytes | 最大字節(jié)數(shù)限制 |
maxconns | 允許最大連接數(shù) |
growth_factor | 自增長(zhǎng)因子 |
chunk_size | key+value+flags大小 |
reqs_per_event | 最大吞吐量 |
- Stats items/slabs:數(shù)據(jù)項(xiàng)統(tǒng)計(jì)/區(qū)塊統(tǒng)計(jì)
參數(shù) | 參數(shù)作用 |
---|---|
number | 該slab中對(duì)象數(shù),不包含過(guò)期對(duì)象 |
age | LRU中最老對(duì)象的過(guò)期時(shí)間 |
evicted | LRU釋放對(duì)象數(shù) |
evicted_nonzero | 設(shè)置了非0時(shí)間的LRU釋放對(duì)象數(shù) |
evicted_time | 最后一次LRU秒數(shù),監(jiān)控頻率 |
outofmemory | 不能存儲(chǔ)對(duì)象次數(shù) |
tailrepairs | 修復(fù)slabs次數(shù) |
reclaimed | 使用過(guò)期對(duì)象空間存儲(chǔ)對(duì)象次數(shù) |
slab核心參數(shù)
參數(shù) | 參數(shù)作用 |
---|---|
chunk_size | chunk大小 |
chunk_per_page | 每個(gè)page的chunk數(shù)量 |
total_pages | page數(shù)量 |
total_chunk | chunk數(shù)量*page數(shù)量 |
get_hits | get命中率 |
userd_chunks | 已被分配的chunk數(shù)量 |
free_ chunks | 剩余的chunk數(shù) |
mem_requested | 使用過(guò)期對(duì)象空間存儲(chǔ)對(duì)象次數(shù) |
active_slabs | slab數(shù)量 |
分析.png
內(nèi)存調(diào)優(yōu)
在這臉簡(jiǎn)單回顧Memcached的Slab Allocator機(jī)制
Slab Allocator.png
說(shuō)明:
- 如圖所示贱纠,Slab下面劃分Page,Page下面劃分Chunk
- 同一個(gè)Slab下面所有Chunk大小一樣饵溅,不同Slab使用自增長(zhǎng)因子遞增
- 在Slab Class中存放Chunk大小與Slab的對(duì)應(yīng)關(guān)系,客戶端訪問(wèn)Xmemcached后妇萄,先根據(jù)存放內(nèi)容的大小尋找合適的Slab
存在的問(wèn)題
- 存不滿Chunk
- 熱點(diǎn)數(shù)據(jù)的堆積
- Slab不能被Page整除
- Page不能被Chunk整除
思路
- 調(diào)整Chunk大小
- 調(diào)整自增長(zhǎng)因子
場(chǎng)景:MSM
存儲(chǔ)的特點(diǎn):
- 數(shù)據(jù)長(zhǎng)度集中在某幾個(gè)區(qū)域內(nèi)
- 分均勻分布
優(yōu)化思路:
- 數(shù)據(jù)集中在那幾個(gè)區(qū)域內(nèi)【eg:90 100 110】
- 能不能將chunk調(diào)成一致
在eg中,如果調(diào)成一致那就是要110咬荷,對(duì)于存儲(chǔ)90的數(shù)據(jù)就會(huì)浪費(fèi)20byte空間冠句,如果90的數(shù)據(jù)很多浪費(fèi)的空間就會(huì)比較大 - 調(diào)整Chunk大小和自增長(zhǎng)因子、slab大小
比如我們有90M空間幸乒,劃分成3個(gè)Slab懦底,每個(gè)Slab就是30M,調(diào)自增長(zhǎng)因子為1.1罕扎,那么chunk大小基本是按照90 100 110左右分布
使用限制和建議
- 限制:
- 不提供持久化機(jī)制
- Memcached只有理論上的永久持久化【30天】
- 不提供安全機(jī)制聚唐,要放在防火墻之后
- Memcached的理論最大key長(zhǎng)度為250字節(jié)
- 單個(gè)item最大長(zhǎng)度為1M
- 連接數(shù) 并發(fā)數(shù)200 軟連接1024
- 不提供冗余機(jī)制
- 建議
- 基于文本形式的存儲(chǔ),Memcached目前效率最高
- 作為數(shù)據(jù)庫(kù)前端
- 作為熱點(diǎn)數(shù)據(jù)緩存
- 提升web應(yīng)用速度
- 提高擴(kuò)展性
- 緩存一些查詢結(jié)果
- 推薦使用多級(jí)緩存