工作問題之:redis保存快照問題

今天開發(fā)突然和我說redis 不能寫了。我進(jìn)入redis后發(fā)現(xiàn)確實是這樣,不可以執(zhí)行set指令了。報錯如下:

創(chuàng)新互聯(lián)公司專注于漠河企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城建設(shè)。漠河網(wǎng)站建設(shè)公司,為漠河等地區(qū)提供建站服務(wù)。全流程按需制作,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

172.31.18.90:6379> set  test test1

(error) 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一直是正常的。不是權(quán)限問題導(dǎo)致的,也不是內(nèi)存耗盡

通過查看log發(fā)現(xiàn)是這個報錯fork: Cannot allocate memory

在小內(nèi)存的進(jìn)程上做一個fork,不需要太多資源,但當(dāng)這個進(jìn)程的內(nèi)存空間以G為單位時,fork就成為一件很恐怖的操作。何況在16G內(nèi)存的主機(jī)上fork 14G內(nèi)存的進(jìn)程呢?肯定會報內(nèi)存無法分配的。更可氣的是,越是改動頻繁的主機(jī)上fork也越頻繁,fork操作本身的代價恐怕也不會比假死好多少。

工作問題之:redis 保存快照問題

找到原因之后,直接修改內(nèi)核參數(shù) vm.overcommit_memory = 1

sysctl -p 使內(nèi)核參數(shù)生效

參數(shù)解釋:

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

如果 vm.overcommit_memory = 1,直接放行

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

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

這里在重新發(fā)一下redis 的回寫機(jī)制

Redis的數(shù)據(jù)回寫機(jī)制分同步和異步兩種,

同步回寫即SAVE命令,主進(jìn)程直接向磁盤回寫數(shù)據(jù)。在數(shù)據(jù)大的情況下會導(dǎo)致系統(tǒng)假死很長時間,所以一般不是推薦的。

異步回寫即BGSAVE命令,主進(jìn)程fork后,復(fù)制自身并通過這個新的進(jìn)程回寫磁盤,回寫結(jié)束后新進(jìn)程自行關(guān)閉。由于這樣做不需要主進(jìn)程阻塞,系統(tǒng)不會假死,一般默認(rèn)會采用這個方法。

這里注意:

在redis中運(yùn)行config set stop-writes-on-bgsave-error no命令只能暫時解決不能set的問題。出了問題還是要看log的

默認(rèn)配置 stop-writes-on-bgsave-error yes當(dāng)bgsave出錯時數(shù)據(jù)將不能修改

本文名稱:工作問題之:redis保存快照問題
文章轉(zhuǎn)載:http://muchs.cn/article6/pppsog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)網(wǎng)站設(shè)計公司、網(wǎng)站導(dǎo)航、軟件開發(fā)網(wǎng)頁設(shè)計公司、企業(yè)建站

廣告

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

外貿(mào)網(wǎng)站建設(shè)