Memcache 提高緩存命中率


最近手上某個項目跟新代碼,新的代碼里大量采用memcahce作為緩存。所以開始深入了解memcache的內存分配策略。以前就聽說有個PHP寫的memcache監控腳本,在網上搜索了一下,果斷下載下來用 memcache.php
修改一下php文件代碼配置

?
1
2
3
4
define(‘ADMIN_USERNAME’,'admin’);
define(‘ADMIN_PASSWORD’,'admin’);
$MEMCACHE_SERVERS [] = ’127.0.0.1:11211′;
$MEMCACHE_SERVERS [] = ’127.0.0.1:11212′; //可以多個監控

問題出現了
發現命中率 以每天0.5%的速度下降 從原來的97%下降到了94%。
Misses 的個數增長飛快。
從監控的Variables看出,幾乎所有的items都集中在slab2里,有將近8737個Item。
那么問題肯定出現在slab2所緩存的數據上面。

開始查找問題~
從網上下載了一個memcached統計工具memcache-tool
在linux下運行 memcached-tool 127.0.0.1:11211

?
1
2
#        Item_Size    Max_age     Pages        Count        Full?      Evicted  
slabId   chunk的大小   生命周期   page數量    緩存項個數    是否已滿    被注銷數?

看來slab 2 類的 page 數據儲存已滿 ,但page的個數並沒有增加,count已達到8738.
memcache守護進程為
memcached -d -m 10 -u root -p 11211
分配的內存只有10M , Chunk的Size 的倍數因子 -f 為默認的1.25

?
1
2
3
4
5
6
7
8
9
[root@]# memcached -u root -vv
slab  class    1: chunk size        96 perslab   10922
slab  class    2: chunk size       120 perslab    8738
slab  class    3: chunk size       152 perslab    6898
slab  class    4: chunk size       192 perslab    5461
slab  class    5: chunk size       240 perslab    4369
slab  class    6: chunk size       304 perslab    3449
slab  class    7: chunk size       384 perslab    2730
slab  class    8: chunk size       480 perslab    2184

 

0M的內存分給了過多的 slab,導致每個slab的pages 最多只能有1個,無法增加pages。
slab2的 count 已經達到了所能容納的最高值8738。不斷的有緩存數據被Evicted。

解決問題
新開一個memcache守護進程
memcached -d -m 10 -f 2 -u root -p 11212
在項目代碼中將所有使用memcache 11211 slab2 的緩存數據 接口地址改為 11212

?
1
2
3
[root@ ~]# /home/duyumi/memcached-tool 127.0.0.1:11212
   #  Item_Size  Max_age   Pages    Count    Full?  Evicted Evict_Time OOM
   2     192B      5190s       2    8001      no        0        0    0

pages數增加為2,count達到了8001,並沒有full,一個page的最大chunk為5461,每個chunk的大小為192B

?
1
2
3
4
5
[root@ ~]# memcached -u root -f 2 -vv
slab  class    1: chunk size        96 perslab   10922
slab  class    2: chunk size       192 perslab    5461
slab  class    3: chunk size       384 perslab    2730
....

緩存項並沒有被Evicted。

ok,問題解決了

來源:http://my.oschina.net/u/231017/blog/303686


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM