溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

redis : Can't save in background: fork: Cannot allocate memory

發布時間:2020-08-07 23:58:57 來源:ITPUB博客 閱讀:259 作者:haoge0205 欄目:關系型數據庫

redis : Can't save in background: fork: Cannot allocate memory

JAVA程序報錯信息:

MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error

查看redis日志:

18793:S 02 Dec 10:02:02.069 # Can't save in background: fork: Cannot allocate memory

18793:S 02 Dec 10:02:08.088 # Can't save in background: fork: Cannot allocate memory

18793:S 02 Dec 10:02:14.006 # Can't save in background: fork: Cannot allocate memory

18793:S 02 Dec 10:02:20.021 # Can't save in background: fork: Cannot allocate memory

18793:S 02 Dec 10:02:26.038 # Can't save in background: fork: Cannot allocate memory

18793:S 02 Dec 10:02:32.054 # Can't save in background: fork: Cannot allocate memory

18793:S 02 Dec 10:02:38.067 # Can't save in background: fork: Cannot allocate memory

18793:S 02 Dec 10:02:44.086 # Can't save in background: fork: Cannot allocate memory

18793:S 02 Dec 10:02:50.002 # Can't save in background: fork: Cannot allocate memory

18793:S 02 Dec 10:02:56.017 # Can't save in background: fork: Cannot allocate memory

18793:S 02 Dec 10:03:02.037 # Can't save in background: fork: Cannot allocate memory

18793:S 02 Dec 10:03:08.056 # Can't save in background: fork: Cannot allocate memory

18793:S 02 Dec 10:03:14.073 # Can't save in background: fork: Cannot allocate memory

18793:S 02 Dec 10:03:20.091 # Can't save in background: fork: Cannot allocate memory

18793:S 02 Dec 10:03:26.007 # Can't save in background: fork: Cannot allocate memory

數據回寫分同步和異步兩種方式:

同步回寫(SAVE), 主進程直接向磁盤回寫數據. 在數據量大的情況下會導致系統假死很長時間

異步回寫(BGSAVE), 主進程fork后, 復制自身并通過這個新的進程回寫磁盤, 回寫結束后新進程自行關閉

由于 BGSAVE 不需要主進程阻塞, 系統也不會假死, 一般會采用 BGSAVE 來實現數據回寫.

redis在dump數據的時候會啟動fork子進程,由于內存不夠,導致無法持久化落盤

redis有個默認的選項:

stop-writes-on-bgsave-error yes

這個選項默認情況下,如果在RDB snapshots持久化過程中出現問題,設置該參數后,Redis是不允許用戶進行任何更新操作。

不徹底的解決方式是,將這個選項改為false

stop-writes-on-bgsave-error false

但是這樣只是當redis寫硬盤快照出錯時,可以讓用戶繼續做更新操作,但是寫硬盤仍然是失敗的

徹底解決方案:直接修改內核參數 vm.overcommit_memory = 1

編輯文件 /etc/sysctl.conf 添加:

vm.overcommit_memory=1

執行sysctl -p使其生效

Linux內核會根據參數vm.overcommit_memory參數的設置決定是否放行。

vm.overcommit_memory = 1,直接放行

vm.overcommit_memory = 0:則比較 此次請求分配的虛擬內存大小和系統當前空閑的物理內存加上swap,決定是否放行。

vm.overcommit_memory = 2:則會比較進程所有已分配的虛擬內存加上此次請求分配的虛擬內存和系統當前的空閑物理內存加上swap,決定是否放行。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女