【问题追查】mc集群写入恍惚问题排查

1.现象

业务方反馈在向memcache集群写入数据时,出现不稳定。表现为向mc写入一个creative和ad对象的list,有的时候能写进去并读出来,有的时候写成功但是读不出来。

2.问题排查

2.1 复现问题

  • a.有的key没有问题,能够一直写+读。

  • b.有的key一直都是写ok,读None。

  • c.有的key写ok,有的时候读ok有的时候读None.

2.2 proxy的问题?

使用同一个proxy的再次复现问题,出现了之前的多种情况。所以排除proxy问题。

另外在排查中发现出现问题的key长度小于20B、value长度在9K~10K左右。

2.3.mc集群问题?

2.3.1 集群各节点状态

集群各个节点状态,以10.2.10.10:11211为例:

image

通过看集群各个节点的状态,发现节点的slab存在不同程度的Full.

情节较为严重的是10.2.10.8:11211,10.2.10.9:11211,10.2.10.10:11211这三个节点,并且Evicted很多。

2.3.2 再次复现问题

用client直接连接不同的节点,在有的节点上读写都ok,有的节点上出现了之前的问题。确定是集群节点出现问题。

基本确定问题和mc集群节点上5.5K~16.9K之间的slab的Full状态以及Evicted有关。

2.3.3 集群内存使用情况

内存使用情况

image

最大内存5GB,每个实例用了1.5GB左右。 内存没满啊,为什么存不进去?

再次返回来看各个节点的状态,以10.2.10.10:11211为例:

把分配的Page都加起来:158+2+1+1+1+1+1+1+2+7+4+9+5+754+58+558+576+2869+90+7+6+2+1+1+1+1+1+1+1+1=5121 ~ 5GB

5GB是分配给每个节点的maxmemory.

说明所有的memory page都被分配给相应的slab了,目前即使有一部分page回收后空闲,但是这部分空闲的page没有被重新分配到全局空闲空间,供其他slab使用。

看一下chunk size为1.8K的一行,分配page为754,item数量1209,也就是说这个slab里面,实际只有1MB左右的数据,却分配了754M的空间,严重浪费。

为什么mc就不能把已经分配的空闲空间回收呢?

问题定位:mc没有把已经分配的空闲空间回收。

3.问题解决

3.1 再造集群复现问题

1.自己搭了一个64M的mc节点。

2.用4k的value数据写满:

image

3.删除所有数据:

image

4.再用1k的value写满:

image

发现这次value大小为1k的很多都Evited了。并且上次value大小为4k的数据虽然已经删除了,但是page大多数还处于被分配状态。

image

在stats里面看到,slabs也出现了reassign(就是在启动参数里面指定了slabsreassign和slabsautomove),但是和我们要的差距有点大。

在1.4.11的ReleaseNote里面看到:

image
image
image

可以通过命令手动重新分配slot,试一下

image

写满1k数据:

image

有4个page迁移了

image

再写一遍1k数据:

image

写一遍2k的数据:

image

能看到reassign的速度变快了。但还是和我们要的差距有点大。我们不能经常手动执行slabs reassign.

我们用的mc是1.4.13,新版本的mc是不是解决了这个问题?

于是下载最新的1.4.33,重复上面的测试。

3.3 新版本测试

下载最新版本1.4.33,重试上面的测试:

用4k的value数据写满:

image

删除所有数据:

image

用1k的value写满:

image

貌似没什么变化啊,赶紧下载最新的代码看看在申请空间的时候怎么做的。

image

这4个函数基本就是lru_maintainer线程回收空间的核心代码了,限于篇幅不再罗列代码。

概括一下就是:

maintainer线程处于一个while循环中,不断对所有的slabscls进行循环,看看哪些slabscls里面空闲空间的>2.5个page,就标记一下到slab_reb里面,等待回收。

并且不断对lru表维护,如果hot,warm lru占有内存超过限定额度,将hot lru的item移至warm lru, warm lru的item移至cold lru,以及对cold lru里面对象的回收等等.

slabclass_t对应三条lru队列,即hot,warm,cold lru,最终内存不足的时候会有优先删除cold lru的数据。

另外,最新的mc里面也支持一个crawler线程和maintainer线程配合。crawler线程用来检查当前memcache里面的所有item是否过期等。

3.4 新版本再测试

1.启动参数:

增加lru_maintainer参数

2.写4k数据:

image

3.全部删除:

image

4.写入8k数据:

image

5.删除8k数据:

image

6.写满6k数据:

image

7.写入4k无过期数据,8k有过期的数据600s

image

8.写入5k的不过期数据:

image

9.写入5k无过期数据,8k有过期的数据600s

image

10.写入4k带过期数据:

image

删除了8k的过期数据。

加入lru_maintainer线程之后效果大好,另外,如果增加crawler线程的话会占用锁,可能会影响mc的性能(需要性能测试)

4.结论

通过上面的实验看出,1.4.33的mc在page分配完成后的回收上效果很好。

如果集群已经出现了page分配完的情况,如果使用新版的mc,一方面会缓存之前1.4.13版本写不进去的数据,提高在slab钙化情况下的空间利用率,提高mc命中率。另一方面因为将数据分别放在hot,warm,cold lru里面,能快速的找到替换的空间,大大降低查找已经过期的空间回收时间,进一步提高性能。

5.升级新版本

目前广告的所有mc都已经升级到1.4.33版本。

6.Ref

https://github.com/memcached/memcached
https://github.com/memcached/memcached/wiki/ReleaseNotes1411

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351

推荐阅读更多精彩内容