このスクリーン ショットに基づく: http://www.dropmocks.com/mBvx1 (リンク切れ)
redis は実際に必要だと思うメモリの 2 倍必要ですか? ディスクに保存する別のプロセスが生成されると思いますが、それは実際にメモリをコピーすることを意味しますか?
このスクリーン ショットに基づく: http://www.dropmocks.com/mBvx1 (リンク切れ)
redis は実際に必要だと思うメモリの 2 倍必要ですか? ディスクに保存する別のプロセスが生成されると思いますが、それは実際にメモリをコピーすることを意味しますか?
Redis は、データによっては最大 8GB まで簡単に使用できます。そうは言っても、あなたが話している「ダブルメモリ」は赤いニシンです。フォークしてメモリを「コピー」しますが、コピーオンライトテクノロジーにより、メモリはプロセス間で共有され、2つのうちの1つが書き込まれた場合にのみ書き込まれますプロセスは、メモリの特定のバイトに変更を加えます。
したがって、ディスクへの保存中に、保存中に変更されたキーのみが、2 つのプロセス間で追加のメモリ割り当てを引き起こします。それ以外はすべて共有されます。お役に立てれば。
redisに8GBのメモリがある場合、これ以上は使用されません。ただし、保存中に、fork()は新しいredisを「処理」し、すべてのデータをコピーします(たとえば、8 GB以上)。これをメモリに収めることができないため、スワップファイル(ディスクなど)でスワップします。保存が完了すると、メモリは解放されます。
私のサーバーでこれに気づきました。多くのsphinxプロセスが実行されており、2つのredisサーバーが4GBと保存の両方で同じ時間に発生しました。
http://redis4you.com/articles.php?id=006&name=Redis+swap+issue+while+save
Redis が最大 8GB を占めるべきだとは思いません。メモリ リークが発生している可能性があるため、2.X にアップグレードすることをお勧めします。
しかし、あなたの質問に戻ると、Redis はディスクに保存する新しいプロセスを作成すると思いますが、Redis はメモリに保存されます。電源障害が発生して RAM 内のすべてのデータが失われた場合に備えて、ディスクに保存します。