今天在程序中,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
