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

Mongo驱动程序电流连接

容俊豪
2023-03-14

我的java代码使用com.mongodb.DB的单个实例连接到mongo DB。现在我使用这个db实例跨越500个线程,这些线程对我的db执行命令。所有这些都并行运行。以下是conf参数:

autoConnectRetry = true; 
connectionsPerHost=50; 
threadsAllowedToBlockForConnectionMultiplier=800; 
connectTimeout=20000; 
socketTimeout=60000; 
maxWaitTime=2000;

现在,如果我使用“db.serverStatus().connections”检查我的数据库,我会得到以下结果:“current”:52,“available”:19999,“totalCreated”:NumberLong(3681)。。。。在我看来还可以。。。

我已经编写了代码,即使在所有线程都完成之后,我的主类仍然在循环中运行,因此我的JVM仍然处于运行状态。但我看到,直到我停止我的JVM,所有这52个连接仍然处于活动状态。现在我再次执行相同的程序,他又占用了50个。一旦对db的执行结束,我如何才能使连接空闲。是否非常有必要停止JVM以释放它们。此外,我不认为关闭()是调用每个线程的好选择,因为我必须为每个线程从头开始创建一个连接...

如果这是我的基于应用服务器的应用程序,那么这个数字可能永远不会减少,因为JVM不会在db调用后停止。

请帮忙。。

共有1个答案

茹展鹏
2023-03-14

目前,Java驱动程序只会在应用程序退出或MongoClient关闭时释放/关闭连接。

有一个Jira票证(JAVA-424)可以随时间缩小连接池。它已经在目前正在开发的3.0版本中修复。

一般来说,MongoDB不存在大量连接(数千个)的问题,因此即使运行50或100个应用程序实例也不应该成为问题。

我不知道为什么主循环保持应用程序运行,但也许它可以检测工作线程何时完成,并在有更多工作要做时关闭MongoClient并重新创建它?

嗨,罗伯

 类似资料:
  • 我有一个同时进行5次查询的应用程序,我可能需要在所有查询完成之前退出该应用程序,我想知道如何取消我的MongoClient正在进行的所有当前操作并关闭连接。 从我在stackoverflow中读到的另一个问题中,没有必要关闭或处置MongoClient中的连接,因为客户端会自动处理它,因此客户端会在应用程序退出时关闭连接,但客户端会等待这些查询完成后自动关闭还是会立即关闭?如果它等待,我如何让它取

  • 我正在尝试将mongo shell与我的mongo atlas M0集群连接,结果出现了这个错误 错误消息 我尝试的解决方案无效: 我将monog版本升级到4.2,以便与atlas中的mongo版本保持同步,但没有解决mongo出现此错误的问题 "mongodb://cluster0-shard-00-02.79t7i.azure.mongodb.net:27017,cluster0-shard-

  • 使用mongo c#驱动程序的连池和等待队列出现问题。 有没有办法从MongoClient获取指标?活动连接的数量、连接池的大小、等待队列的大小等。

  • 我们正在尝试使用nodejs/mongo原生驱动程序实现下面演示(幻灯片13-18)中概述的策略。 https://www.slideshare.net/mongodb/securing-mongodb-to-serve-an-awsbased-multitenant-securityfanatic-saas-application 总结: 从node.js.创建到mongoDB的连接池 对于租户

  • 我已经准备了一些在Mongo上执行的脚本。它在命令行中按预期工作: 但是当我试图在java(scala)代码中移动它时,它不能与 有人成功使用db.eval()方法吗?

  • 我想使用Mongo-Scala驱动程序创建一个集合的唯一索引。这个驱动程序是新的,我也是Scala的新手。我无法通过这两种方法创建索引。 还有这个: 有没有人可以帮助如何在Mongo-Scala驱动程序中创建唯一的索引,因为它是非常新的,没有太多的信息可用。