You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS运行时Redis内存占用异常增长问题排查求助

Redis内存异常暴涨排查问题

我的应用仅使用Redis缓存少量Key,总数据量不大:

  • 未运行应用时,Redis保留旧Key,内存占用仅为可用内存的0.4%
  • 应用仅更新现有Key,不会新增Key,Key的总大小始终保持不变
  • 但启动应用后,Redis内存开始暴涨,最终导致应用崩溃;应用退出后,内存占用恢复至初始水平
  • 已通过DI(依赖注入)为所有模块提供同一个Redis工厂实例
排查思路
  • 实时监控Redis核心指标
    • 执行INFO memory命令,重点对比应用启动前后的used_memory、used_memory_rss、mem_fragmentation_ratio数值,确认内存增长的具体类型(是Redis自身数据占用,还是内存碎片、RSS膨胀)
    • 用CLIENT LIST查看连接状态,关注每个连接的omem(输出缓冲区占用)、idle(空闲时间)字段,排查是否存在大量活跃连接的缓冲区堆积
  • 验证Key操作的真实性
    • 运行MONITOR命令实时捕获所有Redis操作,确认是否真的只有更新操作,是否存在隐性的DEL+SET组合操作(这类操作会产生临时内存占用,或导致过期Key的内存碎片)
    • 用DEBUG OBJECT [key]查看单个Key的内存占用,对比应用启动前后的数值,确认Key本身的内存是否未发生变化
  • 排查Redis内存管理配置
    • 检查maxmemory-policy和maxmemory配置,确认是否在应用启动后触发了不合理的内存清理策略,导致内存波动
    • 查看是否开启了透明大页(THP),THP会加剧内存碎片问题,建议执行echo never > /sys/kernel/mm/transparent_hugepage/enabled关闭
  • 检查客户端与连接池配置
    • 确认Redis客户端的连接池参数(如最大连接数、空闲超时),排查是否存在连接泄漏或连接池过载
    • 检查客户端是否开启了自动流水线、批量操作,是否存在大量未处理的请求堆积在客户端或Redis的输出缓冲区
  • 排查持久化相关影响
    • 查看Redis的RDB/AOF持久化触发时机,应用启动时是否刚好触发持久化:fork子进程会通过写时复制占用内存,若此时应用频繁更新Key,会导致大量内存被复制,表现为内存暴涨,直到持久化完成
  • 系统层面内存排查
    • 用top、free -h命令查看系统整体内存状态,确认Redis的内存增长是真实数据占用,还是系统缓存、swap导致的统计异常

内容的提问来源于stack exchange,提问作者Denis Hyrin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 17:16:11