Redis内存使用率在95%以上,请问是什么原因?如何解决?

内存使用率在生产环境一般会有三种场景:

  1. 一直都很高 比如95%以上
  2. 突然飙高,一般和瞬时流量有关,内存使用率达到100%
  3. 只是某个节点飙高 ,内存使用率达到100%

场景不一样,问题的原因也可能不一样,解决方案也会不一样。具体的问题原因以及解决方案如下。

一、内存使用率长期处于高水位的解决办法

  1. 盘点下key的使用情况,清理掉无用的key;
  2. 看下key是否设置了合适的TTL策略,避免一直存在redis中;
  3. 检查是否有大key,大key很多的话,就会占用很多内存;
  4. 根据业务需求,设置合理的数据逐出策略,主要是调整maxmemory-policy参数的值;
  5. 根据业务需求,设置合理的过期Key主动删除的执行频率(即调整hz参数的值);
  6. 经过上述步骤优化后,内存使用率依旧较高,可以考虑从硬件配置上入手加大内存。

二、内存使用率突然上升的解决办法

1. 问题原因

内存使用率突然升高一般和瞬时并发流量有关,具体表现为:

  1. 短时间内大量写入新数据;
  2. 短时间内大量创建新连接;
  3. 突发访问产生大量流量超过网络带宽,导致输入缓冲区和输出缓冲区积压;
  4. 客户端处理速度跟不上Redis的处理速度,导致输出缓冲区积压。

2. 具体解决方案

  1. Redis性能监控的入流量与写QPS一致的话,也就是说流量可以承接,可能是写数据太大导致,这个需要升级下redis内存配置,也可以清理下无效的key,腾出更多的空间;
  2. 如果连接数突增的话,首先排除链接是否泄漏,正常关闭;或者设置连接超时时间(timeout 参数),自动关闭空闲连接;
  3. 执行MEMORY STATS命令,看下clients.normal占用的内存是否过多。如果是的话,排查业务流量突发原因或者提升带宽;
  4. 执行MEMORY DOCTOR命令,查看big_client_buf的值。当big_client_buf=1时,代表至少有一个客户端的输出缓冲区占用内存较大。执行CLIENT LIST命令,查看哪个客户端的输出缓冲区内存占用量(omem)较大。排查该客户端应用是否存在性能问题。

三、单个节点内存飙高

这种情况一般都是hash到这个分片大key或者热点key 有关系,一般解决办法是:

  1. 拆分key,分散单个节点流量,使数据更加均匀地分布在不同的数据分片节点上;
  2. 增加redis实例的内存,进行扩容。
相关推荐
玖米GEO运营王总监5 分钟前
2026年账号矩阵协同效应怎么量化:三个指标与公式结构
java·大数据·数据库
我不会起名字32221 分钟前
Redis 从 0 到 1(二十九):CPU 突然 100%——commandstats 定位法与 6 步排查链路
redis·cpu·慢查询·排查·commandstats
code2cat44 分钟前
【随笔】KV缓存卸载:逐层预取能藏住多少传输时间
人工智能·缓存·大语言模型
景煜拾年1 小时前
InnoAI SQL 助手
运维·数据库·笔记·sql
我不会起名字3222 小时前
Redis 从 0 到 1(二十八):Redis 抖一下,重试把它打挂了——超时/重试/熔断的 Go 封装
redis·go·超时·熔断·重试
.痞老板.2 小时前
mysql初阶--数据类型
android·数据库·mysql
Risehuxyc2 小时前
MySQL密码插件
数据库·mysql
我不会起名字3223 小时前
Redis 从 0 到 1(三十):删了一半数据 RSS 不降——内存碎片与 activedefrag 观测
redis·内存碎片·rss·排查·activedefrag
腾科IT教育3 小时前
Oracle考试全解析:OCP、OCM认证体系与核心考点备考指南
数据库·oracle·开闭原则
叼烟扛炮13 小时前
Linux 学习笔记(五十六):IO 多路复用初探——select 的“三宗罪”
linux·服务器·数据库·笔记·学习·php