我们使用的是相当大的(20GB),非常活跃(> 92%命中率)的Memcache集群,并且看到了超过10%的浪费空间。如何修复高memcached浪费的空间?
逐出率极低(0.1 /秒),并且再生的速率是平 - 0
这是引起人们的关注,并且有什么可以做 - 即使周期性地 - 以确保是不是吃得像现在一样多?
我们使用的是相当大的(20GB),非常活跃(> 92%命中率)的Memcache集群,并且看到了超过10%的浪费空间。如何修复高memcached浪费的空间?
逐出率极低(0.1 /秒),并且再生的速率是平 - 0
这是引起人们的关注,并且有什么可以做 - 即使周期性地 - 以确保是不是吃得像现在一样多?
我最近对我们的memcached集群的空间使用情况做了一次分析,大约是这个大小的两倍。
我们发现,memcached通常在“空间”空间时,它会在各种尺寸的板坯中没有填充空的卡盘。
这似乎是Memcached < 1.4.11中的板块分配是静态的,而且对于某个板块大小的内存只能从相同大小的板块中逐出(一旦分配),这似乎是一个副作用。
http://code.google.com/p/memcached/wiki/ReleaseNotes1411
作为1.4.11板坯重新分配的一个特征被引入,这是假想意味着允许的LRU驱逐从其它板坯类的对象,以在需要的板坯类使用。
我不确定如果驱逐率是这样的,内存不断被驱逐并重新分配到不同的slab类和从不同的slab类重新分配,会发生什么。
然而,鉴于低驱逐率,我不会过分担心,除非您在其他地方遇到性能问题。
希望有帮助。
这些服务器在1.4.13上,所以理论上它应该随着时间的推移而回收。这篇文章似乎已经解释得最好,而〜10%的浪费应该是正确的工作模式:http://www.mikeperham.com/2009/06/22/slabs-pages-chunks-and-memcached/ – 2012-07-10 00:27:35
我相信重新分配功能必须明确转向。 – alex 2012-07-10 15:43:58
你真的有写入失败吗?因为如果没有写入失败并且你的驱逐很低,那么memcached不会浪费空间,它当时并不需要它 – Lepidosteus 2012-07-09 21:25:38
没有失败的写入,尽管这个集群最近在线(4天前)上线了,而且它似乎已达到88%的使用率。驱逐率现在正在稳步上升 - 我知道这很正常 - 只是想看看我是否应该更多地进入。 – 2012-07-10 00:25:06