しばらくの間、私は奇妙な問題を経験しています:
Spring IoC コンテナーによってインスタンス化された Mongo() シンゲルトンを備えた Spring 3 Web アプリケーションがあります。Mongo クラスは @Autowired を正しく取得しており、クエリや更新などを発行できます。
しばらくすると、DBPortPool で接続発行のタイムアウトに関する例外が発生します。
トラブルシューティングを行うために、プール統計をログ ファイルにダンプするジョブを作成しました。
数時間後、次の出力が得られます。
Total : 38
Used : 8
Unused : 30
Detailed Usage:
Duration: 0, Namespace: null, No Documents 0, ThreadName: null, Class: class com.mongodb.InUseConnectionBean, OpCode: null, Query: null
Detailed Usage:
Duration: 0, Namespace: null, No Documents 0, ThreadName: null, Class: class com.mongodb.InUseConnectionBean, OpCode: null, Query: null
Detailed Usage:
Duration: 0, Namespace: null, No Documents 0, ThreadName: null, Class: class com.mongodb.InUseConnectionBean, OpCode: null, Query: null
Detailed Usage:
Duration: 0, Namespace: null, No Documents 0, ThreadName: null, Class: class com.mongodb.InUseConnectionBean, OpCode: null, Query: null
Detailed Usage:
Duration: 0, Namespace: null, No Documents 0, ThreadName: null, Class: class com.mongodb.InUseConnectionBean, OpCode: null, Query: null
Detailed Usage:
Duration: 0, Namespace: null, No Documents 0, ThreadName: null, Class: class com.mongodb.InUseConnectionBean, OpCode: null, Query: null
Detailed Usage:
Duration: 0, Namespace: null, No Documents 0, ThreadName: null, Class: class com.mongodb.InUseConnectionBean, OpCode: null, Query: null
Detailed Usage:
Duration: 0, Namespace: null, No Documents 0, ThreadName: null, Class: class com.mongodb.InUseConnectionBean, OpCode: null, Query: null
基本的に、クラス ConnectionPoolStatisticsBean のすべてのプロパティを出力するだけです。
さて、何が紛らわしいですか: 通常、これらの変数 Duration、Namespace、ThreadName、Class、および Query にはデータが入力されています。いいえ、これらの接続は解放されていないようです。
残念ながら、現時点でこのバグを再現することはできません。
これらの接続がスタックしている場所を見つける方法のヒントはありますか?
ご協力ありがとうございました!
1月
//編集:
私は使用します:
DBCollection col = mongo.getDB(this.db).getCollection("コレクション"); col.insert(...)
db.requestStart(); は発行しません。または db.requestDone()。