memcached優化方法
阿新 • • 發佈:2017-05-15
理解 添加 memcach ats 由於 還要 思路 小數據 邏輯
工作原理
基本概念:slab,page。chunk。
slab,是一個邏輯概念。
工作流程:memcahed實例啟動,依據 -f 和 -n 進行預分配slab。
註意: 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。緩存小數據。
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狀態。
省帶寬。省網絡I/O時間。省內存。
7,依據業務特點,為數據尺寸區間小的業務分配專用的memcached實例。這樣能夠調小 -f 參數。使數據集中存在少數幾個slab上。內存浪費較少。memcached優化方法