因为一段时间以来我遇到了一个奇怪的问题:
我有一个 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()。