1

因为一段时间以来我遇到了一个奇怪的问题:

我有一个 Spring 3 webapp,带有一个由 Spring IoC 容器实例化的 Mongo() 单格顿。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()。

4

0 回答 0