sql >> データベース >  >> NoSQL >> Redis

フォークがメモリを割り当てることができないため、redisbgsaveが失敗しました

    具体的には、RedisFAQから

    Redisのバックグラウンド保存スキーマは、最新のオペレーティングシステムでのフォークのコピーオンライトセマンティクスに依存しています。親の正確なコピーであるRedisフォーク(子プロセスを作成)。子プロセスはDBをディスクにダンプし、最後に終了します。理論的には、子は親がコピーであるのと同じ量のメモリを使用する必要がありますが、実際には、ほとんどの最新のオペレーティングシステムによって実装されたコピーオンライトセマンティクスのおかげで、親と子のプロセスは共通のメモリページを共有します。ページは、子または親で変更された場合にのみ複製されます。理論的には、子プロセスの保存中にすべてのページが変更される可能性があるため、Linuxは子が使用するメモリの量を事前に知ることができません。したがって、overcommit_memory設定がゼロに設定されている場合、RAMの空き容量がない限り、フォークは失敗します。すべての親メモリページを実際に複製する必要があります。その結果、3GBのRedisデータセットと2GBの空きメモリがある場合は失敗します。

    overcommit_memoryを1に設定すると、Linuxはリラックスして、より楽観的な割り当て方法でフォークを実行するようになります。これは、Redisに求められるものです。

    Redisは、OSがディスクへの書き込みに必要と考えるほど多くのメモリを必要としないため、フォークを先制的に失敗させる可能性があります。



    1. MongoDBのパフォーマンスを最適化する方法

    2. mongodbで段落を保存/表示するにはどうすればよいですか?

    3. サブドキュメントを作成した後、マングースに入力するにはどうすればよいですか?

    4. 複数のフィールドで同時にMongodb集計(カウント)