redis:Can'tsaveinbackground:fork:Cannotallocatememory

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

專注于為中小企業(yè)提供成都網(wǎng)站建設、成都網(wǎng)站設計服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)海淀免費做網(wǎng)站提供優(yōu)質的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千多家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉變。

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

數(shù)據(jù)回寫分同步和異步兩種方式:

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

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

由于 BGSAVE 不需要主進程阻塞, 系統(tǒng)也不會假死, 一般會采用 BGSAVE 來實現(xiàn)數(shù)據(jù)回寫.

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

redis有個默認的選項:

stop-writes-on-bgsave-error yes

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

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

stop-writes-on-bgsave-error false

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

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

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

vm.overcommit_memory=1

執(zhí)行sysctl -p使其生效

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

vm.overcommit_memory = 1,直接放行

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

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

文章標題:redis:Can'tsaveinbackground:fork:Cannotallocatememory
分享地址:http://muchs.cn/article34/jcjhpe.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App設計、品牌網(wǎng)站建設、網(wǎng)站排名手機網(wǎng)站建設、做網(wǎng)站營銷型網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化