web-dev-qa-db-ja.com

一度に大量のファイルが開かないようにするにはどうすればよいですか?

MMAPv1ストレージエンジンでMongoDBを数年間実行していますが、WiredTigerにアップグレードする必要があります。 (主にイベントストリームを使用できるようにするためですが、mmapv1が 非推奨 になっているためです)。

私のアプリケーションは、すべての顧客に対して少数のコレクションを使用します。これは、多くのコレクションを意味します。 MMAPv1の名前空間ファイルの制限により、これらは複数のデータベースに分割されます。コレクションはたくさんありますが、大きくはないので、シャーディングは必要ありません。基本的に、これは正常に機能し、安定しています。

ただし、開発環境(Mac OS)でWiredTigerに切り替えると、WiredTigerがすべてのコレクションとすべてのインデックスに個別のファイルを使用するだけでなく、mongodプロセスを開始するとすべてのファイルが開いていることがわかります。コレクションにアクセスする前。

実稼働環境(CentOS 7)をwiredTigerを使用するように移行すると、100万近くのファイルが作成される可能性があり、これはさらに大きくなると推定しています。

私はulimitの問題を認識しており、 ドキュメント を読みました。アドバイスによると、recommendedulimitは64,000です。これが私が最終的にするものよりもはるかに低いのではないかと心配しています。


だから私の質問...

  • すべてのファイルが一度に開かれるのは正常ですか?それとも私が何か間違ったことをしているように聞こえますか?

  • これはMacの問題だけですか? (Linuxでの移行はまだテストしていません)

  • 途方もなく高いulimitを設定した場合、これはサーバーに悪影響を及ぼしますか?

2
Tim

通常、mongodbは接続のプールを使用します。net.maxIncomingConnectionsランタイムオプションを使用して、着信接続の数を制限できます。着信接続の数を制限することで、mongosがmongodインスタンスで作成する接続が多すぎるカスケード効果を防ぐことができます。

あなたの質問に関して私の答えはインラインです:

すべてのファイルが一度に開かれるのは正常ですか?それとも私が何か間違ったことをしているように聞こえますか?私の答え:接続の作成はコストのかかる操作であるため、永続的な接続(プール)を作成するプロセスは間違っていません。

これはMacの問題だけですか? (Linuxでの移行はまだテストしていません):私の回答:同じように機能しますが、変更は各環境の制限になります。

途方もなく高いulimitを設定した場合、これはサーバーに悪影響を及ぼしますか?私の回答:制限を変更すると、システムリソースの消費に確実に影響します。開いているスレッドを使用してアプリケーションに必要な接続数を取得し、それに応じて設定を調整してください。

上記の回答がお役に立てば幸いです。

2
asktyagi