redis replica時觸發了BGSAVE FAIL的問題

來源:互聯網
上載者:User
今天做redis replica碰到一個問題。執行了slaveof命令後,slave info顯示與master斷開,查看系統日誌顯示報錯如下:Connecting to MASTER...[17727] 07 Dec 11:31:03 * MASTER <-> SLAVE sync started[17727] 07 Dec 11:31:03 * Non blocking connect for SYNC fired the event.[17727] 07 Dec 11:31:03 # MASTER aborted replication with an error: ERR Unable to perform background save於是查看master的系統日誌,報錯如下:Slave ask for synchronization[2487] 07 Dec 14:08:09 * Starting BGSAVE for SYNC[2487] 07 Dec 14:08:09 # Can't save in background: fork: Cannot allocate memory[2487] 07 Dec 14:08:09 * Replication failed, can't BGSAVE在控制台執行bgsave果然不行,google了良久,找到了問題根源:http://groups.google.com/group/redis-db/browse_thread/thread/dc4876861b174358再一看master的系統日誌裡啟動部分,果然有警告如下:[5660] 08 Oct 13:49:56 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf
and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.定位到問題的關鍵是參數vm.overcommit_memory的設定,參考http://iloutuoli.blogspot.com/2011/11/sysctl-vmovercommitmemory.html所說:

vm.overcommit_memory 表示核心在分配記憶體時候做檢查的方式。這個變數可以取到0,1,2三個值。對取不同的值時的處理方式都定義在核心源碼 mm/mmap.c 的 __vm_enough_memory 函數中。
取 1 的時候 :
此時宏為 OVERCOMMIT_ALWAYS,函數直接 return 0,分配成功。
取 2 的時候: 
此時宏為 OVERCOMMIT_NEVER,核心計算:記憶體總量×vm.overcommit_ratio/100+SWAP 的總量,如果申請空間超過此數值,則分配失敗。vm.overcommit_ratio 的預設值為50。
取 0 的時候:
此時宏為 OVERCOMMIT_GUESS,核心計算:NR_FILE_PAGES 總量+SWAP總量+slab中可以釋放的記憶體總量,如果申請空間超過此數值,則將此數值與空閑記憶體總量減掉 totalreserve_pages(?) 的總量相加。如果申請空間依然超過此數值,則分配失敗。
以上為粗略描述,在實際計算時,如果非root進程,則在計算時候會保留3%的空間,而root進程則沒有該限制。詳細過程可看源碼。

由於這塊配置涉及系統核心,需要root許可權, 接下來就只有等著ops幫忙操作了。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.