-
报错
客户端输出缓冲区超限
Client … scheduled to be closed ASAP for overcoming of output buffer limits 表示这些客户端(通过 psubscribe 命令进行发布订阅操作)的输出缓冲区超过了 Redis 配置的限制,Redis 会关闭这些客户端连接来避免问题扩大。psub 表示客户端处于模式订阅状态,oll(输出列表长度)、omem(输出缓冲区占用内存)等指标反映缓冲区使用情况,超过配置的 client-output-buffer-limit 相关阈值就会触发 。
检查 Redis 配置文件(redis.conf 等)中 client-output-buffer-limit 配置项,看针对 pubsub (发布订阅场景)的限制是否合理。默认可能类似 client-output-buffer-limit pubsub 32mb 8mb 60 ,即硬限制 32MB,软限制 8MB,超过软限制持续 60 秒就会关闭连接。可根据实际业务中发布订阅消息量、客户端消费速度等,适当调整这些阈值,但要注意不要过度放宽导致内存溢出等风险。
-
关闭redis缓存
放开限制:8g 6g 300秒
Redis 场景下 vm.overcommit_memory,推荐设置为 1,原因如下:
- 参数作用与 Redis 需求
vm.overcommit_memory 控制 Linux 内核内存分配策略,有 0、1、2 三个取值:
0(默认):内核检查可用内存,不足则拒绝申请,Redis 执行 bgsave(后台持久化)、bgrewriteaof(AOF 重写)时,因 fork 子进程需临时申请内存,低内存下易失败,日志会报 Background save may fail under low memory condition。
1:内核允许超量分配内存(直到实际用尽),能让 Redis fork 操作在低内存时也尝试执行,避免因内存检查严格导致持久化 / 重写失败,保障 Redis 数据持久化流程稳定。
2:内核严格限制内存分配(不超 swap + 物理内存×overcommit_ratio),Redis fork 极易因内存不足失败,一般不适用 Redis 场景。 - 配置方式
临时生效:执行 sysctl vm.overcommit_memory=1 ,系统重启后会恢复原配置。
永久生效:编辑 /etc/sysctl.conf,添加 / 修改 vm.overcommit_memory = 1,保存后执行 sysctl -p 加载新配置(无需重启系统,也可重启让配置生效 )