0

私の Java コードは、com.mongodb.DB の単一インスタンスを使用して mongo DB に接続します。今、私はこの db インスタンスを使用して、db に対してコマンドを実行した 500 のスレッドにまたがっています。それらはすべて同時に並行して実行されます。以下は、conf パラメータです。

autoConnectRetry = true; 
connectionsPerHost=50; 
threadsAllowedToBlockForConnectionMultiplier=800; 
connectTimeout=20000; 
socketTimeout=60000; 
maxWaitTime=2000;

"db.serverStatus().connections" を使用してデータベースをチェックすると、次の結果が得られます: "current" : 52、"available" : 19999、"totalCreated" : NumberLong(3681)....自分...

すべてのスレッドが完了した後でも、メイン クラスがループ内で実行されるようにコードを記述したので、JVM は起動したままです。しかし、JVM を停止するまで、これら 52 の接続はすべてアクティブなままであることがわかります。今度は同じプログラムをもう一度実行します。彼はさらに 50 を使用します。データベースへの実行が終了したら、どうすれば接続を解放できますか。それらを解放するには、JVM を停止する必要がありますか? さらに、スレッドごとにゼロから接続を作成する必要があるため、close() はスレッドごとに呼び出すのに適したオプションではないと思います..

これが私のアプリ サーバー ベースのアプリケーションである場合、db 呼び出し後に JVM が停止しないため、おそらく数が減ることはありません。

助けてください..

4

1 に答える 1