50GB のコレクションのタイムスタンプ フィールドに単一のインデックスを追加すると、MongoDB は 96GB のルート サーバーでメモリ不足になります。
MongoDB には、クエリやタスクを「セーフ モード」で実行するオプションはありますか?たとえば、メモリをあまり消費しませんか? 非常に扱いにくいようで、クラッシュする可能性があります。たとえば、インデックスのないタイムスタンプ フィールドで $lte/$gt を使用して検索クエリを実行すると、クラッシュする可能性があります。
私はそれを制御することはできませんが、制限を破ったときにRAMを解放することを確認する「安全」のためのmongodb構成設定があるべきではありませんか? 他のプロセスをブロックする前、または oom killer によって停止される前でしょうか?
MongoDB は独自のメモリ管理を使用しません。代わりに、OS の LRU を使用します。に割り当てられたメモリ量を使用したため、OS はドキュメントを非常に頻繁にページングしていmongod
ます。つまり、MongoDB がすべてのデータではなくほとんどのページ フォールトをスワップしているため、MongoDB に割り当てられている RAM の量よりも作業セットの方が大きいということです。 (ページングの良いリファレンス: http://en.wikipedia.org/wiki/Paging )。
この場合MongoDBを制限することは強くお勧めulimit
しませmongo
んmongod
. /
MongoDB には、クエリやタスクを「セーフ モード」で実行するオプションはありますか?たとえば、メモリをあまり消費しませんか?
あまり。
非常に扱いにくいようで、クラッシュする可能性があります。たとえば、インデックスのないタイムスタンプ フィールドで $lte/$gt を使用して検索クエリを実行すると、クラッシュする可能性があります。
当然、これによって MongoDB の OOM 例外が発生することはありません。どこかでメモリ リークが発生している可能性があります: http://docs.mongodb.org/manual/administration/ulimit/
MongoDB を実行しているシステムで常駐メモリ サイズを制限すると、オペレーティング システムが通常の状況で mongod プロセスを終了できるようになる危険があります。この値は設定しないでください。オペレーティング システム (Linux など) が OOM キラーを使用して mongod を強制終了する場合は、serverStatus の出力を確認し、MongoDB がメモリ リークしていないことを確認します。
非常に扱いにくいようで、クラッシュする可能性があります。たとえば、インデックスのないタイムスタンプ フィールドで $lte/$gt を使用して検索クエリを実行すると、クラッシュする可能性があります。
あなたのmongodインスタンスが多くのページをRAMにスワップしているため、それを殺しているのはOOMキラーです。RAM をめぐって多くのプロセスが競合している可能性があります。次のように、mongod デーモンを強制終了しないように Linux に指示できます。
sudo echo -17 > /proc/<process if of mongod>/oom_adj
残念ながら、mongodb が使用するメモリの量を制御することはできません。mongodbのバックグラウンド インデックス ドキュメントを参照することをお勧めします。その他の便利なリンク: