redis故障處理 "Can’t save in background: fork: Cannot allocate memory"

來源:本站原創 IT必備工具 超過480 views圍觀 0條評論

搜索相關資料,這里說的比較詳細

http://www.cnblogs.com/qq78292959/p/3994341.html
http://blog.csdn.net/zqz_zqz/article/details/53384854

1. 故障處理方式概述

這個錯誤是因為,redis有個默認選項
stop-writes-on-bgsave-error yes
在默認情況下,如果rdb snapshots持久化出現問題,設置這個參數后,redis不允許用戶進行任何更新

不徹底的解決方式,將這個選項改為no
stop-writes-on-bgsave-error no
這樣只是當redis寫硬盤快照出錯時,可以讓用戶繼續做更新操作,但是寫硬盤仍然是失敗的。

徹底解決方式
編輯/etc/sysctl.conf添加
vm.overcommit_memory=1
執行sysctrl -p 使其生效

[[email protected]  ~]# sysctl -p
vm.overcommit_memory = 1

10702:M 19 Oct 08:27:23.005 # Can’t save in background: fork: Cannot allocate memory
10702:M 19 Oct 08:27:29.012 * 10 changes in 300 seconds. Saving…
10702:M 19 Oct 08:27:29.016 * Background saving started by pid 11970
11970:C 19 Oct 08:27:29.905 * DB saved on disk
11970:C 19 Oct 08:27:29.907 * RDB: 0 MB of memory used by copy-on-write
10702:M 19 Oct 08:27:29.917 * Background saving terminated with success

Linux對大部分申請內存的請求都回復"yes",以便能跑更多更大的程序。因為申請內存后,并不會馬上使用內存,將這些不會使用的空閑內存分配給其它程序使用,以提高內存利用率,這種技術叫做Overcommit。一般情況下,當所有程序都不會用到自己申請的所有內存時,系統不會出問題,但是如果程序隨著運行,需要的內存越來越大,在自己申請的大小范圍內,不斷占用更多內存,直到超出物理內存,當linux發現內存不足時,會發生OOM killer(OOM=out-of-memory)。它會選擇殺死一些進程(用戶態進程,不是內核線程,哪些占用內存越多,運行時間越短的進程越有可能被殺掉),以便釋放內存。
殺掉一些無用進程,以便有更多內存可用。

文章出自:CCIE那點事 http://www.qdxgqk.live/ 版權所有。本站文章除注明出處外,皆為作者原創文章,可自由引用,但請注明來源。 禁止全文轉載。
本文鏈接:http://www.qdxgqk.live/?p=3966轉載請注明轉自CCIE那點事
如果喜歡:點此訂閱本站
?
?
萌宠夺宝游戏 天津十一选五前三走势图表 请查一下今天湖南幸运赛车开奖结果 手里有7000怎么赚钱 3d试机号开奖号历史记录 云南11选5助手 苹果赚钱app教程 双色球基本走势图体坛网 棋牌赢钱游戏50元提现 新加坡快乐8怎么玩 新疆福彩喜乐彩 道琼斯工业股票指数 彩票合买站点加入 白山棋牌在线 彩票平台哪个好 河南11选5走势图一定牛 生产什么的鞋子赚钱