今天在程式中,jedis put資料到redis過程中,“MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk”報錯;
再檢視Redis日誌,看到有這樣的錯誤提示“Can’t save in background: fork: Cannot allocate memory”,這個提示很明顯"Fork程式時記憶體不夠用了!",但記憶體明明還有一個多G;
經網上查詢,Redis在儲存資料到硬碟時為了避免主程式假死,需要Fork一份主程式,然後在Fork程式內完成資料儲存到硬碟的操作,如果主程式使用了4GB的記憶體,Fork子程式的時候需要額外的4GB,此時記憶體就不夠了,Fork失敗,進而資料儲存硬碟也失敗了。
解決如下:
執行命令 sysctl vm.overcommit_memory=1
/etc/sysctl.conf 檔案新增
vm.overcommit_memory=1