我们正在使用一个相当大(20GB)、非常活跃(>92% 命中率)的 Memcache 集群,并且看到超过 10% 的空间浪费。
驱逐率极低(0.1/秒),回收率持平 - 0。
这是否值得关注,有什么可以做的——甚至是定期做的——以确保它不会像目前那样占用那么多可用空间?
我最近对大约两倍大小的 memcached 集群的空间使用情况进行了分析。
我们发现,当 memcached 在各种尺寸的平板中有空卡盘时,通常会出现“浪费”空间,而这些卡盘根本没有被填充。
这似乎是memcached < 1.4.11 中的slab 分配是静态的,并且特定slab 大小的内存仅从相同大小的slab 中逐出(一旦分配)这一事实的副作用。
http://code.google.com/p/memcached/wiki/ReleaseNotes1411
从 1.4.11 开始,引入了slab 重新分配的功能,据说这意味着允许 LRU 从其他slab 类中驱逐对象以在所需的slab 类上使用。
我不确定如果逐出率使得内存不断被逐出并重新分配给不同的平板类会发生什么。
然而,鉴于驱逐率低,除非您在其他地方遇到性能问题,否则我不会过分担心。
希望这会有所帮助。