redis内存碎片过高 mem_fragmentation_ratio >1.5

#zabbix告警-mem_fragmentation_ratio >1.5

1、首先查看当前的内存使用量userd_memory

分析查看内存使用量很小,只有内存使用量大的时候,内存碎步需要关注。

 峰值有400M  当前只有5 M  说明有很多Key被回收了 但是内存还没来得及回收,内存使用量因为Key的回收变小的时候 碎片率一般都很高,对使用没什么影响。

可以修改告警加一个判断条件  当内存使用量 >= 1G 并且内存碎片率 > 1.5时再进行告警。

当前使用率这么低 直接忽略就可以了

-----------------------------------------------------------------------------------------

如果内存使用量很大,并且碎片率很高,可以通过重启或者开启手动内存碎片回收去解决

开启Redis主动内存碎片整理开关,回收碎片内存

开启内存碎片整理的方式也可以降低Redis所在主机内存的使用率,但是开启内存碎片整理会损耗Redis大量性能,且Redis不建议在内存临界状态下使用,会折损很多性能用于key的采集和淘汰,还存在淘汰有用key的风险,因而更建议采用扩容的方式解决这个问题。如果需要临时启用内存碎片整理,相关配置参考如下:

1.清理的条件

在同时满足以下三项配置时,内存碎片自动整理功能才会启用,以下三个参数均可以通过config set 命令进行热更新(无需重启Redis即可生效)

# 碎片整理总开关,默认为禁用状态 no。
activedefrag yes
# 内存碎片达到多大的时候开启整理,默认值100M
active-defrag-ignore-bytes 100mb
# 内存碎片的空间占比超过系统分配给 Redis 空间的 10% ,默认值10
active-defrag-threshold-lower 10

热更新命令参考:

2.CPU 资源占用

如何避免自动内存碎片整理对性能造成影响? 清理的条件有了,还需要分配清理碎片占用的 CPU 资源,保证既能正常清理碎片,又能避免对 Redis 处理请求的性能影响。

# 自动清理过程中,占用 CPU 时间的比例不低于 5%,从而保证能正常展开清理任务,默认值:1
active-defrag-cycle-min 5
# 自动清理过程占用的 CPU 时间比例不能高于 20%,超过的话就立刻停止清理,避免对 Redis 的阻塞,造成高延迟。
# 默认值:25
active-defrag-cycle-max 20

3.整理力度

#碎片整理扫描到set/hash/zset/list 时,仅当 set/hash/zset/list的长度小于此阀值时,才会将此键值对加入碎片整理,大于这个值的键值对会放在一个列表中延迟处理。
active-defrag-max-scan-fields 1000
#内存碎片空间占操作系统分配给 Redis 的总空间比例达此阈值(默认 100%),会尽最大努力整理碎片。建议值为 80
active-defrag-threshold-upper 100

4.其他说明

开启内存碎片整理会损耗Redis性能,建议内存碎片回收完毕后,关闭主动内存碎片整理开关。此外,在开启Redis持久化的情况下,重启也可以解决Redis内存碎片的问题(重启后,Redis会从持久化文件中直接读取数据并加载到内存中)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值