redis持久化開發運維常見問題

歷精圖治發表於2018-11-11

1:fork 操作
2:程式外開銷
3:AOF追加阻塞
4:單機多例項部署

fork操作

1:同步操作
2:與記憶體量息息相關 :記憶體越大,耗時越長 與機器型別有關
3:info:latest_fork_usec 查詢持久化的時間

改善fork

1:優先使用物理機或者搞笑支援fork操作的虛擬化技術
2:控制redis例項最大可用記憶體 maxmemory
3:合理配置linux記憶體分配策略 vm.overcommit_memory=1
4:降低fork頻率:列入放寬AOF重寫自動觸發實際,不必要的全量複製

子程式開銷和優化

1:CPU

  • 開銷:RDB和AOF檔案生成,屬於CPU密集型
  • 優化:不做CPU繫結,不和CPU密集型部署
    2:記憶體
    開銷:fork記憶體開銷 copy-on-write
    優化:echo never >/sys/kernel/mm/transparent_hugepage/enabled
    3:硬碟
    開銷:AOF和RDB檔案寫入,可以結合iostat iptop分析

硬碟優化

1:不要和高硬碟負載服務部署在一起:儲存服務 佇列服務
2:no-appendfysnc-on-rewrite = yes
3:根據寫入量決定磁碟型別 例如ssd
4:單機多例項持久化檔案目錄可以考慮分盤

AOF 追加阻塞

1:主執行緒到緩衝區
2:同步執行緒
3:比上次fysnc時間對比
4:如果時間大於兩秒 阻塞
5:小於兩秒 通過

AOF阻塞定位

Redis 日誌:
info persistence:info persistence
aof_delayed_fsync
通過硬碟資源 查詢

相關文章