2012-07-09 46 views
0

我们使用的是相当大的(20GB),非常活跃(> 92%命中率)的Memcache集群,并且看到了超过10%的浪费空间。如何修复高memcached浪费的空间?

逐出率极低(0.1 /秒),并且再生的速率是平 - 0

这是引起人们的关注,并且有什么可以做 - 即使周期性地 - 以确保是不是吃得像现在一样多?

+0

你真的有写入失败吗?因为如果没有写入失败并且你的驱逐很低,那么memcached不会浪费空间,它当时并不需要它 – Lepidosteus 2012-07-09 21:25:38

+0

没有失败的写入,尽管这个集群最近在线(4天前)上线了,而且它似乎已达到88%的使用率。驱逐率现在正在稳步上升 - 我知道这很正常 - 只是想看看我是否应该更多地进入。 – 2012-07-10 00:25:06

回答

2

我最近对我们的memcached集群的空间使用情况做了一次分析,大约是这个大小的两倍。

我们发现,memcached通常在“空间”空间时,它会在各种尺寸的板坯中没有填充空的卡盘。

这似乎是Memcached < 1.4.11中的板块分配是静态的,而且对于某个板块大小的内存只能从相同大小的板块中逐出(一旦分配),这似乎是一个副作用。

http://code.google.com/p/memcached/wiki/ReleaseNotes1411

作为1.4.11板坯重新分配的一个特征被引入,这是假想意味着允许的LRU驱逐从其它板坯类的对象,以在需要的板坯类使用。

我不确定如果驱逐率是这样的,内存不断被驱逐并重新分配到不同的slab类和从不同的slab类重新分配,会发生什么。

然而,鉴于低驱逐率,我不会过分担心,除非您在其他地方遇到性能问题。

希望有帮助。

+0

这些服务器在1.4.13上,所以理论上它应该随着时间的推移而回收。这篇文章似乎已经解释得最好,而〜10%的浪费应该是正确的工作模式:http://www.mikeperham.com/2009/06/22/slabs-pages-chunks-and-memcached/ – 2012-07-10 00:27:35

+0

我相信重新分配功能必须明确转向。 – alex 2012-07-10 15:43:58