2

過去数週間に発生した問題を分析するための助けが必要です。

ときどきアプリケーションがハングします。基本的には postgres に基づいていますが、いくつかの非常に高速なやり取りのために、重要なデータを mongodb に転送し、同期を維持します。これはうまくいきます - かなり高速で、同期を維持するのに問題はありません.

Java 1.6 と spring 3.2 を使用しています。1 つの Mongo クラスをインスタンス化し、それを約 15 のビジネス ロジック クラスで @Autowire します。

今私の問題は次のとおりです。約2日後に例外が発生します:

com.mongodb.DBPortPool$ConnectionWaitTimeOut: Connection wait timeout after 120000 ms
    at com.mongodb.DBPortPool.get(DBPortPool.java:186)
    at com.mongodb.DBTCPConnector$MyPort.get(DBTCPConnector.java:327)
    at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:212)
    at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:189)
    at com.mongodb.DBApiLayer$Result._advance(DBApiLayer.java:452)
    at com.mongodb.DBApiLayer$Result.hasNext(DBApiLayer.java:418)
    at com.mongodb.DBCursor._hasNext(DBCursor.java:503)
    at com.mongodb.DBCursor.hasNext(DBCursor.java:523)

プールの接続が不足していると思います。

今私の質問:

常に db.requestDone() を呼び出す必要がありますか?

このページによると:

http://www.mongodb.org/display/DOCS/Java+Driver+Concurrency - 最初の段落、私は読みました:

Mongo オブジェクトは、データベースへの接続の内部プールを維持します (デフォルトのプール サイズは 10)。DB へのすべての要求 (検索、挿入など) に対して、Java スレッドはプールから接続を取得し、操作を実行し、接続を解放します。

私には、スレッドが閉じられるたびに接続が返されているように聞こえました。これは、要求が終了した後に発生するはずでした。mongodb にアクセスするアプリには、長寿命のスレッドはありません。

ヒントをありがとう!

1月

4

1 に答える 1