当前位置: 首页 > 知识库问答 >
问题:

Mongodb Java API在servlet中打开了太多连接

侯沈义
2023-03-14

据我所知,每个应用程序只需要一个MongoClient实例,因此为了方便起见,我使用此方法扩展了HttpServlet:

DB getDB(String dbName) throws Exception {
    MongoClient m = (MongoClient)getServletContext().getAttribute("mongo");
    if(m == null) {
        m = new MongoClient();
        getServletContext().setAttribute("mongo",m);
    }
    return m.getDB(dbName);
}

当我运行这个代码时,它工作得很好,我连接并做我需要做的工作,但每次我运行这个特定的Servlet时,它似乎都会不断地打开与mongoDB的新连接:

Sat Jan 26 21:31:42 [initandlisten] connection accepted from 127.0.0.1:46860 #1 (1 connection now open)
Sat Jan 26 21:31:53 [initandlisten] connection accepted from 127.0.0.1:46861 #2 (2 connections now open)
Sat Jan 26 21:32:00 [initandlisten] connection accepted from 127.0.0.1:46863 #3 (3 connections now open)

在页面中我正在这样做:

DB db = getDB("foo");
col = db.getCollection("bar");

然后运行一个简单的查询。有人能解释为什么我有这么多新的联系吗?我也见过这个蒙哥。霍尔德班。这是我现在做的事情的首选方式吗?

谢谢

共有2个答案

终波涛
2023-03-14

MongoClientOptions中连接池的默认最大大小从10增加到100,详细的Javadoc中提到了这一点:http://api.mongodb.org/java/current/com/mongodb/MongoClientOptions.html#getConnectionsPerHost().

如果使用的是Mongoopions,默认值仍然是10。

水恩
2023-03-14

MongoDBJava驱动程序实现了一个连接池,默认情况下维护10个连接。该池由驱动程序内部管理。您不应该看到超过10个连接从servlet容器传出到Mongo服务器。如果您想更改这些默认设置,请查看MongoOptions。

 类似资料:
  • 我正在编写一个需要读取/写入大量文件的遗传算法。GA的适用性测试是调用一个名为的程序,该程序将文件作为输入并生成文件作为输出。 一切都在工作,除非我使遗传算法的种群规模和/或总代数太大。然后,经过这么多代人,我开始得到这个:(我为许多不同的文件反复得到它,索引 只是我上次运行它时首先出现的那个)。这很奇怪,因为我不是在第一代或第二代之后得到错误,而是在相当多的世代之后,这表明每一代都会打开更多它没

  • 问题内容: 我写了一种测试套件,它占用大量文件。一段时间(2h)之后,我得到了。我仔细检查了所有文件句柄是否再次关闭它们。但是错误仍然存​​在。 我试图找出使用允许的文件描述符的数量以及当前打开的文件描述符的数量: 因此,如果我运行以下测试: 我得到以下输出: 真奇怪,我期望打开的文件描述符会越来越多。我的脚本正确吗? 我正在使用python的记录器和子进程。那可能是我FD泄漏的原因吗? 谢谢,丹

  • 我有一个错误:PHP无法打开流:打开的文件太多。 我在这里查看了stackoverflow的各种答案,但我无法解决这个问题。我主要尝试增加最大打开文件数的限制: 我已编辑/等/安全/限制。conf,其中我指定了: 保存并注销/重新启动该框后,命令: 仍打印出1024个。我不知道为什么这没有效果,我想这就是我得到php错误的原因。如果需要,我可以粘贴整个文件或任何其他配置文件。我使用的是PHP 5.

  • 问题内容: 我使用多个文件来执行一些文件I / O(写入19个文件,确实如此)。写他们几百次后,我得到了。但实际上我一次只能打开几个文件。这里有什么问题?我可以验证写入是否成功。 问题答案: 在Linux和其他UNIX /类似UNIX的平台上,操作系统对进程在任何给定时间可能具有的打开文件描述符的数量进行了限制。在过去,此限制曾经是硬接线1,并且相对较小。如今,它要大得多(几百/千),并且受“软”

  • 我们最近在尝试访问Unix服务器中的weblogic控制台时遇到了一个问题,我们将得到: 错误503--服务不可用 在日志文件中,它会指出: 原因:java。io。FileNotFoundException:/opt/weblogic1036/wlserver\u 10.3/server/lib/co 在谷歌上搜索了一番后,我找到了一个解决方案,其中指出/etc/security/limits。c

  • 我们有几个服务总线侦听器在应用服务中作为连续的Azure Web作业运行。总而言之,有12个侦听器-网络作业在同一个S1应用服务计划上运行。环境很小,每天总共大约有1000-10000条消息。最近我们部署了一个新的监听器(一个监听器,它会定期将DLQ消息重新发送到原始主题长达24小时 我分析了代码,但没有发现高传输控制协议需求的原因。 所有侦听器都像这样工作(. NET控制台应用程序,在应用服务中