1. 程式人生 > >redis阻塞bgsave與bsrewriteaof

redis阻塞bgsave與bsrewriteaof

硬件 設備 rdquo redis 存儲設備 時也 bsp 根據 服務

問題描述:

redis在進程偶爾會出現2個進程redis-server \ redis-bgsave

Redis 首先 fork 一個子進程, 並在該子進程裏進行歸並和寫持久化存儲設備(如硬盤)的. 按照正常邏輯, 在一臺多核的機器上, 即使子進程占滿 CPU 和硬盤, 也不應該導致 Redis 服務阻塞啊!其實, 問題就出在硬盤上.

  Redis 服務設置了appendfsync everysec, 主進程每秒鐘便會調用 fsync(), 要求內核將數據”確實”寫到存儲硬件裏. 但由於子進程同時也在寫硬盤, 從而導致主進程 fsync()/write() 操作被阻塞, 最終導致 Redis 主進程阻塞了.

解決方法:

no-appendfsync-on-rewrite yes

在子進程處理和寫硬盤時, 主進程不調用 fsync() 操作. 註意, 即使進程不調用 fsync(), 系統內核也會根據自己的算法在適當的時機將數據寫到硬盤(Linux 默認最長不超過 30 秒).

redis阻塞bgsave與bsrewriteaof