redisforlackofbacklog

一見藍天發表於2017-08-29

版本:
redis-3.2.9

部署:
5臺64G記憶體的物理機,每臺機器啟動2個redis程式組成5主5備叢集,每臺機器1個主1個備,並且錯開互備。

問題:
發現redis程式佔用記憶體高達40G,而且全是備程式。嘗試通過重啟程式方式釋放記憶體,但進入複製死迴圈,報如下所示錯誤:
for lack of backlog (Slave request was: 51875158284)

通過網上查詢資料,修改client-output-buffer-limit和repl-timeout值,問題未能得到解決,仍然報for lack of backlog,並仍然迴圈複製。
move備程式的data目錄,但保留nodes.conf檔案,然後再重啟,這次重啟成功。採取同樣方法處理其它備程式,同樣成功,記憶體同樣降到和主程式接近的大小10G。

待分析:為何備程式佔用的記憶體是它的主程式的4倍(分別40G和10G)?除了上述方法外,是否有其它更安全可靠的釋放辦法?