首页/数据/Redis 进阶速查/客户端驱逐与观察
内存与管理99 条

客户端驱逐与观察

启用客户端内存限制后,超限客户端会被断开(evicted_clients 计数);客户端侧表现为连接中断,服务端日志记录原因。

Redis 进阶速查数据更新于 2026-10-13

客户端内存上限与驱逐

maxmemory-clients 用来限制全部客户端连接占用的内存总量(主要是输入输出缓冲),超过上限时 Redis 会挑出占用最高的连接断开,并在 INFO stats 的 evicted_clients 里累计次数。它保护的是实例本身:一个慢消费者或大范围查询的客户端就可能吃掉大量缓冲,进而触发键淘汰甚至内存耗尽。客户端侧只能看到连接被断开,真实原因要回到服务端指标与日志里找。该限制默认关闭,必须显式配置比例或绝对值后才生效。

基本信息

配置项maxmemory-clients
默认值0,表示不限制
取值形式绝对值(如 200mb)或百分比(如 5%)
出现版本Redis 7.0 起
驱逐计数INFO stats 的 evicted_clients
单连接占用CLIENT LIST 的缓冲相关字段
关系与 client-output-buffer-limit 互补,做总量兜底

典型使用场景

  • 慢消费者把实例内存吃满,需要先设总量上限止损
  • 排查业务侧连接中断,确认是否被服务端主动驱逐
  • 为多业务共用实例设置连接内存兜底,避免互相影响
  • 评估订阅场景的内存风险,量化缓冲占总内存的比例
  • 容量规划时把客户端缓冲单独建账,而不是笼统算进数据区
  • 定位大范围查询引发的内存尖峰,用连接级缓冲数据佐证

查看与设置

查看与设置
redis-cli CONFIG GET maxmemory-clients          # 当前上限
redis-cli CONFIG SET maxmemory-clients 5%       # 按最大内存比例设置
redis-cli INFO stats | grep -E 'evicted_clients' # 驱逐次数
redis-cli CLIENT LIST | head -5                  # 看各连接缓冲占用
redis-cli CLIENT LIST | grep -E 'tot-mem'        # 单连接内存字段
redis-cli INFO clients                           # 连接总数与峰值缓冲

客户端内存的三个视角

指标看什么用途
evicted_clients累计驱逐次数确认是否发生过保护性断连
CLIENT LIST 缓冲字段单连接占用定位是哪个客户端吃内存
maxmemory-clients总量上限实例级兜底
出现驱逐先找缓冲来源:大范围查询结果、消费太慢的订阅者、以及跟不上主库的副本连接都是常见大户。
把连接中断直接归因为网络抖动是最常见的误判,先看 evicted_clients 有没有增长。

易错点

  • 把连接中断归因于网络而忽略服务端驱逐日志,问题反复出现无人定位
  • 慢消费者订阅端是输出缓冲大户,pubsub 场景没有重点排查
  • 上限设得过小,正常的大批量查询客户端也被断开
  • 只设上限不监控 evicted_clients,驱逐发生了却无从察觉
  • 上限只改运行期没写回配置文件,重启后保护失效

数据来源与参考

  • Redis 官方文档:客户端驱逐行为
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌