线上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源代码分析之消息回应

phalcon: 缓存片段,文件缓存,memcache缓存

为 memcached 和 Rails 组合片段和对象缓存的最佳方式

线上大量CLOSE_WAIT的原因深入分析

线上es报错异常分析

Memcached源码分析之memcached.c