偶然收到某客户问题“我的 Redis 内存碎片率很低在 0.2 左右,网上说会导致 Redis 性能变慢,我该咋办?”。
官方的计算 Redis 内存碎片率的公式如下:
mem_fragmentation_ratio = used_memory_rss / used_memory
即 Redis 向操作系统中申请的内存
与 分配器分配的内存总量
的比值,两者简单来讲:
前者是我们通过 top 命令看到的 redis 进程 RES 内存占用总量
后者由 Redis 内存分配器(如 jemalloc)分配,包括自身内存、缓冲区、数据对象等
两者的比值结果 < 1
表示碎片率低, > 1
为高, 碎片率高的问题百度上海量文章有介绍,不多赘述,但碎片率低基本都归咎于使用了 SWAP 而导致 Redis 因访问磁盘而性能变慢。但,真的是这样吗?