Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
Kotlin コルーチン

接続のトラブルシューティング

このページでは、MongoDB Kotlin ドライバーの使用中に MongoDB インスタンスまたはレプリカセットに接続することで発生し得る問題の潜在的な解決策を提供します。

注意

このページには接続の問題のみがリストされます。 MongoDB でその他の問題が発生している場合は、次のリソースを検討してください。

  • Kotlin ドライバーのよくある質問(FAQ)

  • バグの報告、ドライバーへの貢献、およびその他のリソースに関する情報については、「問題とヘルプ 」のトピックを参照してください。

  • MongoDB Community フォーラム では、質問、ディスカッション、または一般的なテクニカルサポートが受けられます。

次のエラー メッセージは、ドライバーが指定されたホスト名またはポートでサーバーに接続できないことを示す一般的なメッセージです。

Error: couldn't connect to server 127.0.0.1:27017

このエラーが発生した場合は、問題を解決するために次の方法をお試しください。

接続stringのホスト名とポート番号が両方とも正確であることを確認してください。 サンプル エラー メッセージでは、ホスト名は 127.0.0.1で、ポートは27017です。 MongoDB インスタンスのデフォルトのポート値は27017ですが、MongoDB を別のポートで通信するように構成できます。

MongoDB 配置でデフォルトのポートを使用していることを前提とすると、ファイアウォールでポート27017が開いていることを確認します。 配置で別のポートを使用している場合は、ファイアウォールでポートが開いていることを確認してください。

重要

が MongoDB インスタンスで使用されるポートであることが確実な場合を除き、ファイアウォールでポートを開かないでください。

認証が正しく構成されていない場合、 Kotlin ドライバーは MongoDB インスタンスへの接続に失敗する可能性があります。 これにより、多くの場合、次のようなエラー メッセージが表示されます。

Command failed with error 18 (AuthenticationFailed): 'Authentication failed.' on server localhost:27017.

このエラーが発生した場合は、問題を解決するために次の方法をお試しください。

無効な接続stringは、 MongoDBに接続しようとする際の認証の問題の最も一般的な原因です。

注意

Kotlin ドライバーで接続文字列を使用する方法の詳細については、接続ガイドの「接続 URI 」を参照してください。

接続文字列にデータベースユーザー名とデータベースパスワードが含まれている場合は、それらが正しい形式であることを確認してください。

注意

データベースユーザー名またはデータベースパスワードに次の文字のいずれかが含まれている場合は、パーセントエンコードされている必要があります。

: / ? # [ ] @

Atlasが MongoDBMongoDB Atlasに配置されている場合は、 接続例 を使用して接続string を確認できます。例にある接続stringを に置き換えてください。

レプリカセットに接続するときは、レプリカセット内のすべてのホストを 接続stringに含める必要があります。 接続string内の各ホストをカンマで区切ります。 これにより、ホストの 1 つが到達できない場合でも、ドライバは接続を確立できます。

データベースユーザー名とデータベースパスワードを使用して接続を正常に認証するには、認証データベースにデータベースユーザー名を定義する必要があります。デフォルトの認証データベースは adminデータベースです。認証に別のデータベースを使用するには、接続文字列で authSource を指定します。 次の例では認証データベースとして users を使用するようにドライバーに指示します。

val mongoClient =
MongoClient.create("mongodb://<db_username>:<db_password>@<hostname>:<port>/?authSource=users")

ドライバー経由でリクエストを送信し、コマンドを送信できない場合、多くの場合、次の一般的なエラーメッセージが表示されます。

com.mongodb.MongoSocketWriteException: Exception sending message

このエラーが発生した場合は、問題を解決するために次の方法をお試しください。

アプリ内の接続stringが正確であることを確認します。 これについては、 「 接続エラー」および「 認証エラー 」で説明されています。

認証データベースでユーザーが認識される必要があります。 これについては、 「 認証エラー 」で説明されています。

ファイアウォールは MongoDB インスタンスと通信するためにオープンなポートが必要です。 これは、 「 接続エラー 」で説明されています。

MongoClientインスタンスは、接続プール内で同時にオープンする接続の最大数をサポートします。 この値は構成パラメータmaxPoolSizeによって定義され、デフォルトでは100に設定されます。 すでに開いている接続の数がmaxPoolSizeに等しい場合、サーバーは接続が利用可能になるまで待機します。 この待機時間がmaxIdleTimeMSの値を超えると、ドライバーはエラーで応答します。

ドライバーを介してサーバーにメッセージを送信すると、メッセージの応答に時間がかかることがあります。 このような状況が発生すると、次のいずれかのエラー メッセージのようなエラー メッセージが表示される場合があります。

Timed out after 30000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}.
No server chosen by ReadPreferenceServerSelector{readPreference=primary} from cluster description

これらのエラーが発生した場合は、問題を解決するために次の方法をお試しください。

maxConnectionTimeoutMSオプションは、 Kotlin ドライバーがタイムアウトするまでの接続を待機する時間を示します。 デフォルト値は10000です。 ドライバーをタイムアウトしないようにするには、この値を増やすか、 0に設定します。

maxConnectionLifeTimemaxConnectionIdleTimeの設定を検討してください。 これらのパラメーターは、MongoDB インスタンスとの接続を維持できる期間を構成します。 これらのパラメーターの詳細については、「接続プールの設定 」を参照してください。

オープンな接続が多すぎる可能性があります。 この解決策については、 「 メッセージの送信エラー 」で説明されています。

具体的なエラーメッセージには関係ありませんが、接続の問題をトラブルシューティングする際に役立つ追加情報がこのセクションには含まれています。

TLS/SSL を使用している場合、 -Djavax.net.debug=allシステム プロパティを使用して追加のログ ステートメントを表示できます。 これは、接続の問題をデバッグする際に役立ちます。 TLS/SSL 接続のデバッグに関する Oracle ガイドを参照して ください 詳しくは、 を参照してください。

戻る

FAQ