#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会从持久化文件中直接读取数据并加载到内存中)