【问题标题】:Get the number of open connections in mongoDB using java使用java获取mongoDB中打开的连接数
【发布时间】:2014-01-21 12:51:31
【问题描述】:

我的程序需要打开大量连接(Mongo)。我得到错误:

打开的连接太多,无法再打开

在 819 连接之后。我已经知道我们可以提高这个限制。但这不是我的想法。我正在考虑关闭 MongoClient 对象,然后在 800 个连接后再次创建一个新对象。

我的想法是,使用新的 mongoClient 对象,所有连接都将关闭,当我再次启动/创建它时,连接将再次打开,直到 800。 因此不给出错误。 (让我知道这种方法是否完全错误/不会给出所需的结果。)

为此,我需要知道打开 ATM 的连接数。有没有办法使用 java 获取这些信息?

【问题讨论】:

  • 为什么一开始有这么多的开放空间? MongoClient 内部已经有一个连接池。您应该只创建一个并重用它。你创建了很多 MongoClients 吗?
  • 我正在使用的程序是用于研究目的,试图生成大量数据并对其进行分析。因此有这么多的联系。 (我正在使用多线程)我有几个 mongo 客户端。
  • 有了这个你可以创建一个单例连接器stackoverflow.com/a/26085824/2093371

标签: java mongodb mongodb-java


【解决方案1】:

您可以使用db.serverStatus() 命令获取连接信息。它有一个连接子文档,其中包含总/可用连接信息。

更多信息:

【讨论】:

    【解决方案2】:

    使用 MongoDB Scala 驱动检查 MongoDB 连接数:

    1. 创建 MongoDB 客户端:
    import org.mongodb.scala._
    import scala.collection.JavaConverters._
    import scala.concurrent.Await
    import scala.concurrent.duration._
    import scala.util.{Failure, Success, Try}
    
    // To directly connect to the default server localhost on port 27017
    val mongodbClient: MongoClient = MongoClient()
    
    // Use a Connection String
    val mongodbClient: MongoClient = MongoClient("mongodb://localhost")
    
    // or provide custom MongoClientSettings
    val settings: MongoClientSettings = MongoClientSettings.builder()
        .applyToClusterSettings(b => b.hosts(List(new ServerAddress("localhost")).asJava).
        .build()
    val mongodbClient: MongoClient = MongoClient(settings)
    
    1. 通过传递mongodbClient调用getNoOfMongodbConnection:
    val result = getNoOfMongodbConnection(mongodbClient)
    
    1. 获取连接数(当前、可用和总数)的方法
    def getNoOfMongodbConnection(mongodbClient: MongoClient) = {
    
        val adminDatabase = mongodbClient.getDatabase("admin")
    
        val serverStatus = adminDatabase.runCommand(Document("serverStatus" -> 1)).toFuture()
    
        Try {
          Await.result(serverStatus, 10 seconds)
    
        } match {
          case Success(x) => {
    
            val connection = x.get("connections")
            logger.info("Number of mongodb connection:--> " + connection)
            connection
          }
          case Failure(ex) => {
            logger.error("Got error while getting the number of Mongodb connection:---> " + ex.printStackTrace())
            None
          }
        }
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-18
      • 1970-01-01
      • 2013-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-10
      相关资源
      最近更新 更多