2014-04-20 50 views
1

隨着我不斷寫入數據到redis,寫時複製使用的內存不斷增加。即使我編寫我的程序進行足夠長的睡眠時間,以便redis能夠完成所有後臺保存(最後一條記錄消息是寫入時複製使用的0 MB內存),但下一個後臺保存將返回到高位數。什麼是寫時複製內存

實施例,

的由牛

的存儲器1400MB由牛使用用於存儲器1300MB

的存儲器0MB使用牛

的存儲器1500MB由牛使用

所有這些意味着什麼?據我所知,如果寫入時複製內存不斷增加,那麼就沒有足夠的內存。另外,除了每個背景都使用高內存外,redis似乎不起作用。 Jedis總是遇到套接字超時異常。

+0

您是否檢出[this](http://blog.sensible.io/2013/08/20/setting-up-redis-for-production-environment.html)博客?你是否設置了'vm.overcommit_memory = 1'? –

+0

是的,我確實設置了overcommit = 1,appendonly是的,appendfsync否 – twb

+0

有趣,但不能幫助我害怕。你也可以在[redis google group](https://groups.google.com/forum/?fromgroups#!forum/redis-db)上詢問,這有助於技術方面的改進。新用戶需要一到兩天的等待時間/批准方案。如果你在你的問題中提供redis版本和os規格,它會有所幫助。 –

回答

0

從Redis的常見問題解答:

Redis的背景節能模式依賴於寫入時複製語義在現代操作系統的叉:Redis的叉子(創建一個子進程),它的精確副本父母。子進程將磁盤上的數據庫轉儲並最終退出。從理論上講,孩子應該儘可能多地使用父母作爲副本的內存,但實際上要感謝大多數現代操作系統實現的寫入時複製語義,父進程和子進程將共享公用內存頁面。只有當它在孩子或父母中發生變化時,頁面纔會被複制。因爲從理論上講,當子進程正在保存時,所有的頁面都可能會改變。

保存過程中增加的內存使用量取決於由於寫入時複製(COW)機制而進行轉儲時執行的寫入次數。

你可以做的是,配置一個Redis slave並將持久性任務委託給它。