有奖捉虫:云通信与企业服务文档专题,速来> HOT

现象描述

现象1:收到内存使用率过高的告警提醒消息。


现象2:在 Redis 控制台系统监控页面,查看到内存使用率Key 驱逐数P99响应时延监控指标均突增。
现象3:程序写入数据提示 command not allowed when used memory > 'maxmemory'错误信息。

Redis 内存占用

Redis 通常占用内存的数据包含以下几类:
对象内存:用户数据区,即实际存储的 Value 信息。
缓冲内存:包括客户端输入和输出缓冲区,以及主从同步复制缓冲区。
说明:
当执行客户端 Range 类操作或大 Key 时,Input buff 与 Output buff 占用的内存会增大,影响缓冲区,甚至导致内存溢出 OOM(Out Of Memory)。
内存碎片:大量的更新操作,例如 append、setrange;大量的过期键删除,释放的空间无法得到有效利用。
链路内存: 创建子进程内存的消耗,一般这部分的消耗会比较小。

处理步骤

序号
可能原因
排查方式
解决方法
1
写入数据量增多引起内存占用升高。
未设置 Key 的 TTL 策略。
1. 登录 Redis 控制台 ,单击实例 ID 进入实例详情页面。
2. 选择系统监控页签,查看 Redis 实例监控指标内存使用率Key 总个数Key 过期数Key 驱逐数对应的监控视图,分析内存占用与 Key 数量波动趋势是否一致。
如果内存占用率与 Key 总个数是正比例增加。
内存可能为业务正常写入的数据占用而增加。请评估业务需求并对 Redis 实例及时扩容。具体操作,请参见 变更实例规格
内存可能因未设置合理的过期驱逐策略以及过期 Key 删除频率而导致 Key 数量堆积而增加。
过期驱逐策略设置不合理,容易导致无效 Key 占用过多的空间。修改 Key 的过期时间、驱逐策略及过期删除频率相关参数,请在控制台参数配置页面重新配置maxmemory-policy参数与hz参数。具体操作,请参见 管理实例参数
Key 过期删除频率设置过高,即 hz 数值增大,将会占用较多 CPU 资源。请根据业务实际情况分析调整,hz 值不宜过大。
2
写入大 Key 引起输入缓冲区溢出。
读取大 key、请求大量命令返回结果、或者执行 monitor 命令引起输出缓冲区溢出。
借助数据库智能管家 DBbrain 诊断优化功能分析内存倾斜问题。具体信息,请参见 内存分析
针对异常大 Key 进行 Value 值拆分和优化。具体方法,请参见 热 Key 与大 key