Redis实例内存使用率高问题排查和解决
问题现象
Redis可提供高效的数据库服务,当内存不足时,可能导致Key频繁被逐出、响应时间上升、QPS(每秒访问次数)不稳定等问题,进而影响业务运行。由于Redis自身运行机制(主从同步、延迟释放等),内存占用率可能出现略微超过100%的情况,此为正常情况,此时内存已经写满,用户需要考虑扩容,或者清理一些无用的数据。通常情况下,当内存使用率超过95%时需要及时关注。
排查原因
- 查询指定时段的内存使用率信息,具体操作请参见性能监控。“内存利用率”指标持续接近100%。
- 查询内存使用率超过95%的时间段内,“已逐出的键数量”和“命令最大时延”,均呈现显著上升趋势,表明存在内存不足的问题。
建议客户登录控制台,参考缓存分析和慢查询,执行大Key扫描和慢查询。如果实例没有设置过期时间,会导致存储数据太多,内存被占满。
- Redis实例如果内存满了但是key不多,可能原因是客户端缓冲区(output buffer)占用过多的内存空间。
可以在Redis-cli客户端连接实例后,执行大key扫描命令:redis-cli --bigkeys,然后执行info,查看output buffer占用情况。
处理措施
- DCS控制台提供了大Key和热Key的分析功能,你可参考分析Redis实例大Key和热Key减少大key和热key。
Redis 3.0实例不支持热key分析,您可以通过配置告警的方式帮助您发现热key。
- 执行过期Key扫描释放已经过期的Key,或手动清理一些不需要的Key,释放空间。
- 其他优化建议:
- 如果实例内存使用率通过以上方式仍然很高,请考虑在业务低峰期扩大实例规格。具体操作请参见变更实例规格。