线上memcached 状态分析
Posted 码农那些事
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线上memcached 状态分析相关的知识,希望对你有一定的参考价值。
线上memcached 出了问题,缓存命中率很低,对此问题展开研究。
一、拉取了原始数据,如下:
[{
"no": 22,
"chunk_size": 11104,
"chunks_per_page": 94,
"total_pages": 120,
"total_chunks": 11280,
"used_chunks": 8012,
"free_chunks": 3268,
"free_chunks_end": 0,
"mem_requested": 79294237,
"get_hits": 28556996,
"cmd_set": 1145202,
"delete_hits": 62,
"incr_hits": 0,
"decr_hits": 0,
"cas_hits": 0,
"cas_badval": 0,
"touch_hits": 0,
"pre": 71.02836879432624
},
{
"no": 23,
"chunk_size": 13880,
"chunks_per_page": 75,
"total_pages": 42,
"total_chunks": 3150,
"used_chunks": 1416,
"free_chunks": 1734,
"free_chunks_end": 0,
"mem_requested": 17374535,
"get_hits": 1617823,
"cmd_set": 1015919,
"delete_hits": 2,
"incr_hits": 0,
"decr_hits": 0,
"cas_hits": 0,
"cas_badval": 0,
"touch_hits": 0,
"pre": 44.952380952380956
},
{
"no": 24,
"chunk_size": 17352,
"chunks_per_page": 60,
"total_pages": 46,
"total_chunks": 2760,
"used_chunks": 735,
"free_chunks": 2025,
"free_chunks_end": 0,
"mem_requested": 11221025,
"get_hits": 1125531,
"cmd_set": 1107278,
"delete_hits": 3,
"incr_hits": 0,
"decr_hits": 0,
"cas_hits": 0,
"cas_badval": 0,
"touch_hits": 0,
"pre": 26.6304347826087
}
]
.......//太多了,略一下
二、统计信息如下:
展示为图表:
可以看出部分问题数据:
序号 | statused_chunks /total_chunkschunks | pages |
3 | [3]152B | 99.975 |
三、综上
1.memcached 局部缓存命中率低,除去单个page的,100K~1M以上的基本呈递减趋势。
2.100K~1M命中率尤为低。
3.需要具体分析存储内容和Key的范围分布,找出偏移量
4.和内存有关,随着Key值存储的增加,分配内存耗尽,各个大小的Page数目固定。于是某些活跃的Key值会被清理,进行内存重用。
针对的方案:
1.迁移部分缓存到Redis上
2.进行以1/5分钟为单位的热度Key值统计。对Key值的操作做模块化和结果性记录。
类似,
获取前 Hset (模块,Key值,1);
注:此方案恰逢我们想要把数据迁移到Redis服务器。如果纯在memcached 上面也可以展开优化。
2015年12月左右问题总结 sunsw。
本人原创,禁止转载。
以上是关于线上memcached 状态分析的主要内容,如果未能解决你的问题,请参考以下文章
Memcached源代码分析 - Memcached源代码分析之消息回应