-
報錯
客戶端輸出緩沖區超限
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 加載新配置(無需重啟系統,也可重啟讓配置生效 )