1

50GB のコレクションのタイムスタンプ フィールドに単一のインデックスを追加すると、MongoDB は 96GB のルート サーバーでメモリ不足になります。

MongoDB には、クエリやタスクを「セーフ モード」で実行するオプションはありますか?たとえば、メモリをあまり消費しませんか? 非常に扱いにくいようで、クラッシュする可能性があります。たとえば、インデックスのないタイムスタンプ フィールドで $lte/$gt を使用して検索クエリを実行すると、クラッシュする可能性があります。

4

2 に答える 2

1

私はそれを制御することはできませんが、制限を破ったときにRAMを解放することを確認する「安全」のためのmongodb構成設定があるべきではありませんか? 他のプロセスをブロックする前、または oom killer によって停止される前でしょうか?

MongoDB は独自のメモリ管理を使用しません。代わりに、OS の LRU を使用します。に割り当てられたメモリ量を使用したため、OS はドキュメントを非常に頻繁にページングしていmongodます。つまり、MongoDB がすべてのデータではなくほとんどのページ フォールトをスワップしているため、MongoDB に割り当てられている RAM の量よりも作業セットの方が大きいということです。 (ページングの良いリファレンス: http://en.wikipedia.org/wiki/Paging )。

この場合MongoDBを制限することは強くお勧めulimitませmongomongod. /

MongoDB には、クエリやタスクを「セーフ モード」で実行するオプションはありますか?たとえば、メモリをあまり消費しませんか?

あまり。

非常に扱いにくいようで、クラッシュする可能性があります。たとえば、インデックスのないタイムスタンプ フィールドで $lte/$gt を使用して検索クエリを実行すると、クラッシュする可能性があります。

当然、これによって MongoDB の OOM 例外が発生することはありません。どこかでメモリ リークが発生している可能性があります: http://docs.mongodb.org/manual/administration/ulimit/

MongoDB を実行しているシステムで常駐メモリ サイズを制限すると、オペレーティング システムが通常の状況で mongod プロセスを終了できるようになる危険があります。この値は設定しないでください。オペレーティング システム (Linux など) が OOM キラーを使用して mongod を強制終了する場合は、serverStatus の出力を確認し、MongoDB がメモリ リークしていないことを確認します。

于 2013-02-05T21:13:26.093 に答える
1

非常に扱いにくいようで、クラッシュする可能性があります。たとえば、インデックスのないタイムスタンプ フィールドで $lte/$gt を使用して検索クエリを実行すると、クラッシュする可能性があります。

あなたのmongodインスタンスが多くのページをRAMにスワップしているため、それを殺しているのはOOMキラーです。RAM をめぐって多くのプロセスが競合している可能性があります。次のように、mongod デーモンを強制終了しないように Linux に指示できます。

sudo echo -17 > /proc/<process if of mongod>/oom_adj

残念ながら、mongodb が使用するメモリの量を制御することはできません。mongodbのバックグラウンド インデックス ドキュメントを参照することをお勧めします。その他の便利なリンク:

  1. stackoverflow の関連スレッドを参照してください
  2. キャッシュ サイズを制限するにはどうすればよいですか?
于 2013-02-05T20:52:55.567 に答える