9

mongodb コレクションで定期的に集計を実行するスクリプトがあります。データセットが大きくなるにつれて、集計にかかる時間も長くなります。私の集計スクリプトは最近一貫して動作しなくなり、エラー ログに次のように表示されます。 error: { [MongoError: server <x> timed out] name: 'MongoError', message: 'server <x> timed out' } これをデバッグしようとしましたが、唯一のパターンは、集計に 2 分以上かかる場合にのみこのタイムアウトが発生するように見えることです (正しくタイムアウトします)。約2m)。これに関する追加のデバッグのヒントはありますか? 2 分間ということは、どこかでタイムアウトを設定する必要があるという印象を私に与えていますが、どこで、または単に赤いニシンの罠に陥っているのかを理解することはできません。

システム構成について: この集計スクリプトは、alpine ベースの docker (v1.9.1) コンテナーで実行される node.js (v5.9.1) アプリケーションです。mongodbノード ドライバー (v2.1.19)を使用します。mongod (v3.2.6) を実行している単一の mongodb サーバー (ただし、これは replSet を使用した別の環境でも発生しています)

4

1 に答える 1

10

ログの時間集計でも同じ問題が発生しました。私はあなたのための解決策を持っていると思います。

オプションがその原因であることがわかりましたsocketTimeoutMS。mongo_client.js のデフォルトsocketTimeoutMS値を確認してください。私にとってはそうでした2min。Mongodb モジュール バージョン 2.1.18。

したがって、このオプションを url に追加するだけです:

mongodb://localhost:27017/test?maxPoolSize=2&socketTimeoutMS=60000

timeout10分に設定されます。それは私にとってはうまくいきます。

于 2016-08-01T09:52:42.467 に答える