Redis 4添加了活动内存碎片整理(来源:发布说明):
活动内存碎片整理。如果使用Jemalloc分配器(Linux上的默认设置),Redis可以在联机时对内存进行碎片整理。对于分配程序无法将碎片保持在足够低的工作负载,唯一的可能是Redis和分配器进行协作,以便对内存进行碎片整理。
在Redis 5中,这个特性(现在称为版本2)已经得到改进:
激活碎片整理版本2.整理正在运行的服务器的内存是一种黑魔法,但奥兰·阿格拉改进了他过去的努力,现在它比以前更有效了。对于长期运行的工作负载来说非常有用,因为这些工作负载往往会将Jemalloc碎片化。
来源2:AWS发布Redis 5
上一次发布的亮点之一是Redis获得了在线时整理内存的能力。它的工作方式非常聪明: Redis扫描键空间,对于每个指针,询问分配器是否将其移动到一个新地址是否有助于减少碎片。这个版本附带了所谓的活动碎片整理2( active defrag 2):它更快、更智能,而且延迟更小。此特性对于分配程序无法保持碎片足够低的工作负载特别有用,因此策略是由Redis和分配器协同工作。为此,必须使用Jemalloc分配器。幸运的是,它是Linux上的默认分配器。
问:假设您已经在使用Jemalloc,有什么理由不总是设置activedefrag yes呢?
考虑到另一种选择是重新启动实例来处理碎片(这是非常有问题的),并且鉴于activedefrag的开销似乎比我到目前为止看到的要低,因此该选项似乎非常有用,无法默认禁用。
或者有什么情况会损害性能?
发布于 2019-06-18 11:39:04
当然,有源碎片整理的性能成本很高,但几乎总是可以忽略不计的。虽然在OSS发行版中默认禁用它,但我们(Redis实验室)已经在生产中使用了很长时间;)
https://serverfault.com/questions/971804
复制相似问题