现象描述
现象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 命令引起输出缓冲区溢出。 |