:http://www.dropmocks.com/mBvx1(死鏈接)Redis交換?在此基礎上截屏
確實需要redis的兩倍的內存其實我覺得它呢?我相信它產生了另一個保存到磁盤的過程,這是否意味着它實際上覆制了內存,並且我應該始終假設我是否擁有16個RAM的演出8是單個redis過程的最大值?
:http://www.dropmocks.com/mBvx1(死鏈接)Redis交換?在此基礎上截屏
確實需要redis的兩倍的內存其實我覺得它呢?我相信它產生了另一個保存到磁盤的過程,這是否意味着它實際上覆制了內存,並且我應該始終假設我是否擁有16個RAM的演出8是單個redis過程的最大值?
我不認爲Redis應該佔用〜8GB。你可能想升級到2.X,因爲我認爲你可能有內存泄漏。
但是,回到你的問題,我認爲Redis確實創建了一個新的進程來保存到磁盤,但Redis存儲在內存中。它可以保存到磁盤以防止電源故障導致RAM中的所有數據丟失
根據您的數據,Redis可能會輕鬆佔用8GB的空間。也就是說,你所說的「雙重記憶」是一個紅鯡魚:它叉叉和「複製」內存,但由於在寫入技術上覆制,內存在進程之間共享,並且只在兩個中的一個進程對內存的特定字節進行更改。
因此,在保存到磁盤時,只有在保存期間更改的密鑰纔會導致兩個進程之間的額外內存分配。其他一切都是共享的。希望這可以幫助。
如果redis有8 GB的內存,它不會使用超過這個。然而,在保存期間,fork()會使新的redis「進程」並將複製所有數據 - 例如8 GB以上。由於它不能適應內存,它會將其交換到交換文件(例如磁盤)上。一旦保存完成,內存將是免費的。
我注意到在我的服務器上有很多獅身人面像進程在運行,2個redis服務器都在4 GB和保存狀態下工作,發生在同一時間。
http://redis4you.com/articles.php?id=006&name=Redis+swap+issue+while+save
當進行後臺保存時,它並不是逐字節地拷貝進程內存映像。請參閱:http://redis.io/topics/faq「Redis後臺保存模式依賴於現代操作系統中fork的copy-on-write語義......」 – Kevin 2012-04-16 22:51:52
我想這隻適用於* nix平臺? 我猜想在Windows上運行Redis可能會導致內存的雙重使用情況? – 2017-04-30 19:08:44