检查当前与MongoDb的连接数


90

获取连接到特定MongoDB服务器的客户端数量的命令是什么?

Answers:


163

连接到管理数据库并运行db.serverStatus()

> var status = db.serverStatus()
> status.connections
   {"current" : 21, "available" : 15979}
> 

您可以通过查询直接获得

db.serverStatus().connections

要了解MongoDb的db.serverStatus().connections响应是什么意思,请阅读此处的文档。

连接数

"connections" : {
   "current" : <num>,
   "available" : <num>,
   "totalCreated" : NumberLong(<num>)
},

连接 报告连接状态的文档。使用这些值可以评估服务器的当前负载和容量要求。

connections.current 从客户端到数据库服务器的传入连接数。该数字包括当前的Shell会话。考虑connections.available的值,可用于向该基准添加更多上下文。

该值将包括所有传入连接,包括任何外壳程序连接或来自其他服务器的连接,例如副本集成员或mongos实例。

连接数 可用的未使用的传入连接的数目。考虑将此值与connections.current的值结合使用,以了解数据库上的连接负载,以及UNIX ulimit设置文档,以获取有关可用连接上系统阈值的更多信息。

connections.totalCreated 对服务器创建的所有传入连接的计数。此数字包括此后已关闭的连接。


25

ClientIP的连接计数,总计

我们使用它来查看IPAddress的连接数以及总连接数。这对于调试问题确实很有帮助...只需在达到最大连接数之前就到达那里!

对于Mongo Shell:

db.currentOp(true).inprog.reduce((accumulator, connection) => { ipaddress = connection.client ? connection.client.split(":")[0] : "Internal"; accumulator[ipaddress] = (accumulator[ipaddress] || 0) + 1; accumulator["TOTAL_CONNECTION_COUNT"]++; return accumulator; }, { TOTAL_CONNECTION_COUNT: 0 })

格式:

db.currentOp(true).inprog.reduce(
  (accumulator, connection) => {
    ipaddress = connection.client ? connection.client.split(":")[0] : "Internal";
    accumulator[ipaddress] = (accumulator[ipaddress] || 0) + 1;
    accumulator["TOTAL_CONNECTION_COUNT"]++;
    return accumulator;
  },
  { TOTAL_CONNECTION_COUNT: 0 }
)

返回示例:

{
    "TOTAL_CONNECTION_COUNT" : 331,
    "192.168.253.72" : 8,
    "192.168.254.42" : 17,
    "127.0.0.1" : 3,
    "192.168.248.66" : 2,
    "11.178.12.244" : 2,
    "Internal" : 41,
    "3.100.12.33" : 86,
    "11.148.23.34" : 168,
    "81.127.34.11" : 1,
    "84.147.25.17" : 3
}

(Atlas内部监控的192.xxx地址)

“内部”是没有外部客户端的内部流程。您可以使用以下命令查看这些列表:

db.currentOp(true).inprog.filter(connection => !connection.client).map(connection => connection.desc);

您能否在返回列表中解释“内部” IP的含义?
carton.swing,

我无法在mongo地图集实例上运行上述示例:E QUERY [js] TypeError: db.currentOp(...).inprog is undefined :使用管理员用户
otong

@ carton.swing我已经更新了答案,并附有说明和命令以查看它们。
SuperGoTeam

@otong您还能得到什么db.currentOp(true)
SuperGoTeam

似乎被mongodb地图集拒绝了: { "ok" : 0, "errmsg" : "Using $all for currentOp is disallowed in this atlas tier", "code" : 8000, "codeName" : "AtlasError" }
otong

19

db.serverStatus()没有给出打开和可用的连接,但没有显示来自哪个客户端的连接。有关更多信息,您可以使用此命令sudo lsof | grep mongod | grep TCP。当我执行复制并且主节点具有许多比辅助节点更大的客户端连接时,我需要它。

$ sudo lsof | grep mongod | grep TCP
mongod    5733             Al    6u     IPv4 0x08761278       0t0       TCP *:28017 (LISTEN)
mongod    5733             Al    7u     IPv4 0x07c7eb98       0t0       TCP *:27017 (LISTEN)
mongod    5733             Al    9u     IPv4 0x08761688       0t0       TCP 192.168.1.103:27017->192.168.1.103:64752 (ESTABLISHED)
mongod    5733             Al   12u     IPv4 0x08761a98       0t0       TCP 192.168.1.103:27017->192.168.1.103:64754 (ESTABLISHED)
mongod    5733             Al   13u     IPv4 0x095fa748       0t0       TCP 192.168.1.103:27017->192.168.1.103:64770 (ESTABLISHED)
mongod    5733             Al   14u     IPv4 0x095f86c8       0t0       TCP 192.168.1.103:27017->192.168.1.103:64775 (ESTABLISHED)
mongod    5733             Al   17u     IPv4 0x08764748       0t0       TCP 192.168.1.103:27017->192.168.1.103:64777 (ESTABLISHED)

这表明我当前有五个连接到计算机上的MongoDB端口(27017)。就我而言,我是从Scalatra服务器连接到MongoDB,并且正在使用MongoDB Casbah驱动程序,但是无论使用什么客户端,您都会看到相同的lsof TCP连接(只要它们使用TCP / IP)。


1
此命令为单个连接返回多个条目:stackoverflow.com/a/42930337/1843751
点燃

3
我建议对-sof使用-i标志。这样,每个连接仅获得1个条目,无需为TCP使用grep。即sudo lsof -i | grep mongod
daddo

7

我试图通过以下命令查看mongo数据库的所有连接。

netstat -anp --tcp --udp | grep mongo

此命令可以更详细地显示mongodb的每个tcp连接。

tcp        0      0 10.26.2.185:27017           10.26.2.1:2715              ESTABLISHED 1442/./mongod       
tcp        0      0 10.26.2.185:27017           10.26.2.1:1702              ESTABLISHED 1442/./mongod  
tcp        0      0 10.26.2.185:27017           10.26.2.185:39506           ESTABLISHED 1442/./mongod       
tcp        0      0 10.26.2.185:27017           10.26.2.185:40021           ESTABLISHED 1442/./mongod       
tcp        0      0 10.26.2.185:27017           10.26.2.185:39509           ESTABLISHED 1442/./mongod 
tcp        0      0 10.26.2.185:27017           10.26.2.184:46062           ESTABLISHED 1442/./mongod       
tcp        0      0 10.26.2.185:27017           10.26.2.184:46073           ESTABLISHED 1442/./mongod       
tcp        0      0 10.26.2.185:27017           10.26.2.184:46074           ESTABLISHED 1442/./mongod   

7

在OS X中,也可以直接在网络接口上查看连接,只需执行以下操作

$ lsof -n -i4TCP:27017

mongod     2191 inanc    7u  IPv4 0xab6d9f844e21142f  0t0  TCP 127.0.0.1:27017 (LISTEN)
mongod     2191 inanc   33u  IPv4 0xab6d9f84604cd757  0t0  TCP 127.0.0.1:27017->127.0.0.1:56078 (ESTABLISHED)
stores.te 18704 inanc    6u  IPv4 0xab6d9f84604d404f  0t0  TCP 127.0.0.1:56078->127.0.0.1:27017 (ESTABLISHED)
  • 无需使用 grepetc,只需使用lsof的参数即可。

  • 在MongoDb的CLI上看不到连接,请参见@milan的答案(我刚刚编辑过)。


7

你可以用

db.serverStatus().connections

此外,此功能还可以帮助您发现连接到Mongo DB的IP地址

db.currentOp(true).inprog.forEach(function(x) { print(x.client) })

1
绝对美丽-谢谢!正是我想要的。
ProsperousHeart

4

还提供了有关与以下连接的更多详细信息: db.currentOp(true)

摘自:https : //jira.mongodb.org/browse/SERVER-5085


我已经读过所有答案的想法,突然之间-这是最有用的方法之一。该查询提供了应有的大量内部详细信息,包括连接时间,当前表,驱动程序版本和平台,甚至还有appName(如果已指定)
Dmitry Gusarov

2

使用mongo-shell连接到MongoDB并运行以下命令。

db.serverStatus().connections

例如:

mongo> db.serverStatus().connections
{ "current" : 3, "available" : 816, "totalCreated" : NumberLong(1270) }

2

db.runCommand({“ connPoolStats”:1})

{
    "numClientConnections" : 0,
    "numAScopedConnections" : 0,
    "totalInUse" : 0,
    "totalAvailable" : 0,
    "totalCreated" : 0,
    "hosts" : {

    },
    "replicaSets" : {

    },
    "ok" : 1
}

这很有趣,我也收到该请求的零值,这不是我想要的:) MongoMonitoringController : { "numClientConnections" : 0 , "numAScopedConnections" : 0 , "totalInUse" : 0 , "totalAvailable" : 0 , "totalCreated" : 0 , "totalRefreshing" : 0 , "pools" : { } , "hosts" : { } , "replicaSets" : { } , "ok" : 1.0}
Alex Efimov

2

抱歉,因为这是一个过时的帖子,当前有比以前更多的选择。

db.getSiblingDB("admin").aggregate( [
   { $currentOp: { allUsers: true, idleConnections: true, idleSessions: true } }
  ,{$project:{
            "_id":0
           ,client:{$arrayElemAt:[ {$split:["$client",":"]}, 0 ] }
           ,curr_active:{$cond:[{$eq:["$active",true]},1,0]}
           ,curr_inactive:{$cond:[{$eq:["$active",false]},1,0]}
           }
   }
  ,{$match:{client:{$ne: null}}}
  ,{$group:{_id:"$client",curr_active:{$sum:"$curr_active"},curr_inactive:{$sum:"$curr_inactive"},total:{$sum:1}}}
  ,{$sort:{total:-1}}
] )

输出示例:

{ "_id" : "xxx.xxx.xxx.78", "curr_active" : 0, "curr_inactive" : 1428, "total" : 1428 }
{ "_id" : "xxx.xxx.xxx.76", "curr_active" : 0, "curr_inactive" : 1428, "total" : 1428 }
{ "_id" : "xxx.xxx.xxx.73", "curr_active" : 0, "curr_inactive" : 1428, "total" : 1428 }
{ "_id" : "xxx.xxx.xxx.77", "curr_active" : 0, "curr_inactive" : 1428, "total" : 1428 }
{ "_id" : "xxx.xxx.xxx.74", "curr_active" : 0, "curr_inactive" : 1428, "total" : 1428 }
{ "_id" : "xxx.xxx.xxx.75", "curr_active" : 0, "curr_inactive" : 1428, "total" : 1428 }
{ "_id" : "xxx.xxx.xxx.58", "curr_active" : 0, "curr_inactive" : 510, "total" : 510 }
{ "_id" : "xxx.xxx.xxx.57", "curr_active" : 0, "curr_inactive" : 459, "total" : 459 }
{ "_id" : "xxx.xxx.xxx.55", "curr_active" : 0, "curr_inactive" : 459, "total" : 459 }
{ "_id" : "xxx.xxx.xxx.56", "curr_active" : 0, "curr_inactive" : 408, "total" : 408 }
{ "_id" : "xxx.xxx.xxx.47", "curr_active" : 1, "curr_inactive" : 11, "total" : 12 }
{ "_id" : "xxx.xxx.xxx.48", "curr_active" : 1, "curr_inactive" : 7, "total" : 8 }
{ "_id" : "xxx.xxx.xxx.51", "curr_active" : 0, "curr_inactive" : 8, "total" : 8 }
{ "_id" : "xxx.xxx.xxx.46", "curr_active" : 0, "curr_inactive" : 8, "total" : 8 }
{ "_id" : "xxx.xxx.xxx.52", "curr_active" : 0, "curr_inactive" : 6, "total" : 6 }
{ "_id" : "127.0.0.1", "curr_active" : 1, "curr_inactive" : 0, "total" : 1 }
{ "_id" : "xxx.xxx.xxx.3", "curr_active" : 0, "curr_inactive" : 1, "total" : 1 }

1

从本地系统连接您的mongodb实例

  1. sudo mongo“ mongodb:// MONGO_HOST_IP:27017” --authenticationDatabase admin

它会让您知道所有连接的客户端及其详细信息

  1. db.currentOp(true)


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.