突然のMongodbの高接続/キュー、データベースが応答を停止する
問題 mongodbのセットアップに奇妙な問題があります。時々、高接続と高キューのピークを取得し、キューと接続を増加させるとmongodbプロセスが応答を停止します。htopでsigkillを使用してインスタンスを再起動する必要があります。 ハードウェアリソースは問題ないため、mongodbの動作をブロックするシステム制限/ mongodb設定があるようです。この問題のバージョンはスタンドアロンで発生し、その後実稼働サーバーでレプリカセットが発生します。今後の詳細。 ソフトウェア環境について これはスタンドアロンのmongodbインスタンス(シャードでもレプリカセットでもない)であり、専用のマシン上で動作し、他のマシンによってクエリされます。Debian 7.7でmongodb-linux-x86_64-2.6.12を使用しています。 mongoを照会するマシンは、Django == 1.7.4、Mongoengine = 0.10.1 with pymongo == 2.8、nginx 1.6.2およびgunicorn 19.1.1を使用しています。 Django settings.pyファイルで、次の行を使用してデータベースに接続しています。 from mongoengine import connect connect( MONGO_DB, username = MONGO_USER, password = MONGO_PWD, host = MONGO_HOST, port = MONGO_PORT ) MMS統計 MMSサービスの次のimgでわかるように、接続とキューにピークがあります。 これが発生すると、mongodbプロセスが完全にフリーズします。SIGKILLを使用してmongodbを再起動する必要がありますが、これは非常に悪いことです。 画像には3つのフリーズイベントがあります。 imgが示すように、これが発生すると、非マップ仮想メモリにもピークがあります。 また、2番目と3番目のフリーズの前後でBtreeチャートの増加を発見しました。 ログを確認しましたが、疑わしいクエリはなく、Opcountersも急増しません。通常よりも多くのクエリはないようです。 同じバグの別の日時の別のスクリーンショットを次に示します。 すべてのケースで、DBのロックはそれほど増加しておらず、ピークがありますが、4%にも達していません。 OpCounterはゼロに低下し、すべてのopがmongodb quequeに送られるように見えるため、データベースは新しい接続を作成して新しい要求を実行しようとし、それらもすべてキューに送られます。 …