什么是内存碎片?
操作系统为你分配了 32 字节的连续内存空间,而你存储数据实际只需要使用 24 字节内存空间,那这多余出来的 8 字节内存空间如果后续没办法再被分配存储其他数据的话,就可以被称为内存碎片
注:Redis 内存碎片虽然不会影响 Redis 性能,但是会增加内存消耗
为什么会有内存碎片?
1、Redis 存储数据的时候会向操作系统申请的内存空间可能会大于数据实际所需要的存储空间
2、频繁修改 Redis中的数据也会产生内存碎片
如何查看内存碎片信息?
使用 info memory 命令即可查看 Redis 内存相关的信息。下图中每个参数具体的含义
used_memory:Redis分配器分配的内存总量(单位是字节),也就是缓存数据内存占用量
used_memory_rss:从操作系统的角度显示Redis进程占用的物理内存总量,包括了没有被使用的内存
xxxxxxx_human:表示显示更友好
mem_fragmentation_ratio:内存碎片比率,该值是 used_memory_rss / used_memory的比值
mem_fragmentation_ratio的不同值,说明不同的情况:
大于1:说明内存有碎片,一般在1到1.5之间是正常的
大于1.5:说明内存碎片率比较大,需要考虑是否要进行内存碎片清理,要引起重视
小于1:说明已经开始使用交换内存,也就是使用硬盘了,正常的内存不够用了,需要考虑是否要进行内存的扩容
通常情况下,我们认为 mem_fragmentation_ratio > 1.5 的话才需要清理内存碎片
如何清理内存碎片
Redis4.0-RC3 版本以后自带了内存整理,可以避免内存碎片率过大的问题
# 碎片整理总开关
# activedefrag yes
# 内存碎片达到多少的时候开启整理
active-defrag-ignore-bytes 500mb
# 碎片率达到百分之多少开启整理
active-defrag-threshold-lower 50
通过 Redis 自动内存碎片清理机制可能会对 Redis 的性能产生影响,我们可以通过下面两个参数来减少对 Redis 性能的影响:
# 内存碎片清理所占用 CPU 时间的比例不低于 20%
config set active-defrag-cycle-min 20
# 内存碎片清理所占用 CPU 时间的比例不高于 50%
config set active-defrag-cycle-max 50
重启节点可以做到内存碎片重新整理。如果你采用的是高可用架构的 Redis 集群的话,你可以将碎片率过高的主节点转换为从节点,以便进行安全重启。
当前共有 0 条评论