1

クライアントがログインしようとしているときに、MongoDBから1つのドキュメントを検索しているアプリケーションがあります。これはほとんどの場合機能しますが、「com.mongodb.MongoException $ Network:何かを呼び出せません:...」の下にタイムアウトがスローされることがあります。

リクエストが失敗すると(事前設定されたタイムアウト後)、次のリクエストは正常に機能しているように見えますが、同じ例外を除いて他の呼び出しがランダムに失敗します。スタックトレースの関連部分は次のとおりです。

at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:295)
at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:257)
at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:310)
at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:295)
at com.mongodb.DBCollection.findOne(DBCollection.java:727)
at com.mongodb.DBCollection.findOne(DBCollection.java:669)

SpringのMongoTemplateを使用してコレクションを取得し、それをクエリして単一のドキュメントを検索しています。私のコードスニペットは次のようになります

BasicDBObject query = new BasicDBObject();
query.put("myIntParam", 283);
DBCollection collection = mongoTemplate.getDb().getCollection(collectionName);
DBObject foundDocument = collection.findOne(query);

同じmongoテンプレートインスタンスが、異なるコレクションの他の読み取りおよび書き込み目的でアプリケーションで使用されています(アプリごとに1つのインスタンスのみを使用することをお勧めします)。

この問題は通常、アプリケーションをしばらくアイドル状態にした後に発生します。私は、Tomcat内からJDK1.7を使用してUbuntu12.10サーバー(私のローカル環境にはUbuntu 12.10用のデスクトップバージョンがあります)で実行しています。Javaドライバのバージョンは2.10.1です。以下の構成オプションが提供されます

mongoOptions.connectTimeout=5000
mongoOptions.socketTimeout=60000
mongoOptions.socketKeepAlive=true
mongoOptions.maxWaitTime=15000
mongoOptions.autoConnectRetry=true

何か提案やアイデアはありますか?

前もって感謝します

4

1 に答える 1

0

アイテムを削除するmongoOptions.socketTimeout=60000か、タイムアウト例外をキャッチしてから、自分で処理してください。

于 2012-12-28T03:46:28.627 に答える