memcached優化方法

2021-09-08 22:45:45 字數 1355 閱讀 5579

工作原理

基本概念:slab,page。chunk。

slab,是乙個邏輯概念。

它是在啟動memcached例項的時候預處理好的,每乙個slab相應乙個chunk size。也就是說不同slab有不同的chunk size。詳細分配多少個slab由引數 -f (增長因子)和 -n (chunk最小尺寸)決定的。

page。能夠理解為記憶體頁。

大小固定為1m。slab會在儲存請求時向系統申請page,並將page按chunk size進行分割。

chunk,是儲存使用者資料的最小單位。使用者資料item(包含key,value)終於會儲存到chunk內。chunk規格是固定的,假設使用者資料放進來後還有剩餘則這剩餘部分不能做其它用途。

工作流程:memcahed例項啟動,依據 -f 和 -n 進行預分配slab。

以 -n 為最小值開始。以 -f 為比值生成等比數列,直到1m為止(每乙個slab的chunk size都要按8的倍數進行補全。比方:假設按比值算是556的話。會再加4到560成為8的整倍數)。然後每乙個slab分配乙個page。當使用者發來儲存請求時(key,value)。memcached會計算key+value的大小。看看屬於哪個slab。確定slab後看裡面的是否有空暇chunk放key+value。假設不夠就再向系統申請乙個page(假設此時已經達到 -m 引數設定的記憶體使用上限,則看是否設定了 -m 。假設設定了 -m 則返回錯誤提示,否則按lru演算法刪除資料)。申請後將該page按本slab的chunk size 進行分割。然後分配乙個來存放使用者資料。

注意:

1,chunk是在page裡面劃分的。而page固定為1m。所以chunk最大不能超過1m。

2,chunk實際占用記憶體要加48b。由於chunk資料結構本身須要占用48b。

3,假設使用者資料大於1m,則memcached會將其分割,放到多個chunk內。

4,已分配出去的page不能**。

優化建議

1,-n 引數的設定,注意將此引數設定為1024能夠整除的數(還要考慮48b的差值)。否則餘下來的部分就浪費了。

2,不要儲存超過1m的資料。由於要拆成多個chunk,計算和時間成本都成倍新增。

3,善用stats命令檢視memcached狀態。

4。消滅eviction(被刪除的資料)。造成eviction是由於記憶體不夠,有三個思路:一是在cpu有餘力的情況下開啟壓縮(php擴充套件);二是新增記憶體;三是調整 -f 引數,降低記憶體浪費。

5,調整業務**。提高命中率。

6。快取小資料。

省頻寬。省網路i/o時間。省記憶體。

7,依據業務特點,為資料尺寸區間小的業務分配專用的memcached例項。這樣能夠調小 -f 引數。使資料集中存在少數幾個slab上。記憶體浪費較少。

memcached效能優化 六

這周工作主要是修改 和調整bug了,目前的思路是放棄skiplist了,因為上週測試了一下基本不靠譜。插入效果一般但是讀取效果更差,這一周主要採用以下的三個優化思路 1.在item中新增乙個為tag的標記位,這個的目的其實很簡單就是優化查詢的效率,當hash有衝突的時候,比較字串的時候先比較tag,...

memcached服務優化策略

檢查memcached命中率 root web01 printf stats r n nc 127.0.0.1 11211 stat get hits 1 命中次數 stat get misses 0 失敗次數 memcached服務優化策略 1提高memcached訪問命中率是優化最關鍵的指標 例...

memcached快取架構優化

基本架構 web nginx php php fpm 9000 memcached mysql 安裝memcache工具包 yum install memcached y systemctl start memcached 安裝memcache原始碼包 tar zxf memcache 4.0.5....