Redis 4 添加了主动内存碎片整理(来源:发行说明):
主动内存碎片整理。如果使用 Jemalloc 分配器(Linux 上的默认分配器),Redis 能够在联机时对内存进行碎片整理。这对于分配器无法将碎片保持在足够低的工作负载很有用,因此唯一的可能性是 Redis 和分配器协作以对内存进行碎片整理。
在 Redis 5 中,该功能(现在称为版本 2)得到了改进:
来源1:Redis 主开发者 Salvatore Sanfilippo 的推文
主动碎片整理版本 2。对正在运行的服务器的内存进行碎片整理是一种黑魔法,但 Oran Agra 改进了他过去的努力,现在它比以前更好用。对于容易使 Jemalloc 碎片化的长期运行工作负载非常有用。
来源2:AWS 宣布推出 Redis 5
上一版本的一大亮点是 Redis 获得了在线整理内存碎片的功能。它的工作方式非常巧妙:Redis 扫描键空间,并针对每个指针询问分配器将其移动到新地址是否有助于减少碎片。此版本附带了所谓的主动碎片整理 2:它更快、更智能,并且延迟更低。此功能对于分配器无法将碎片保持在足够低的工作负载特别有用,因此策略是 Redis 和分配器合作。要使其工作,必须使用 Jemalloc 分配器。幸运的是,它是 Linux 上的默认分配器。
问题:假设您已经在使用 Jemalloc,有什么理由不总是设置activedefrag yes
?
鉴于另一种方法是重新启动实例来处理碎片(这是非常成问题的),并且鉴于从我目前看到的情况来看,activedefrag 的开销似乎很低,该选项似乎太有用了,以至于默认情况下无法禁用。
或者是否存在会损害性能的情况?
答案1
主动碎片整理确实会降低性能,但几乎可以忽略不计。虽然它在 OSS 发行版中默认禁用,但我们 (Redis Labs) 已在生产中使用多年 ;)