因为有一段时间我遇到了一个奇怪的问题:
我有一个带有Mongo()singelton的spring 3 webapp,它由spring IoC容器实现。 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正在填充数据。不,这些联系似乎没有被释放。
不幸的是,到目前为止我无法重现此错误。
任何提示我如何找出这些连接被卡住的地方?
谢谢大家的帮助!
扬
//编辑:
我确实使用:
DBCollection col = mongo.getDB(this.db).getCollection(“collection”); col.insert(...)
我没有发出db.requestStart();或者db.requestDone()。