MongoDb'ye mevcut bağlantı sayısını kontrol edin


92

Belirli bir MongoDB sunucusuna bağlı istemcilerin sayısını alma komutu nedir?

Yanıtlar:


169

yönetici veritabanına bağlanın ve çalıştırın db.serverStatus():

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

Doğrudan sorgulayarak alabilirsiniz

db.serverStatus().connections

Mongodb en ne yaptığını anlamak için db.serverStatus().connectionstepki ortalamasını, dokümanları okuyun burada .

bağlantıları

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

bağlantılar Bağlantıların durumu hakkında rapor veren bir belge. Sunucunun mevcut yük ve kapasite gereksinimlerini değerlendirmek için bu değerleri kullanın.

connection.current İstemcilerden veritabanı sunucusuna gelen bağlantıların sayısı. Bu sayı, mevcut kabuk oturumunu içerir. Bu veriye daha fazla bağlam eklemek için connection.available değerini göz önünde bulundurun.

Değer, herhangi bir kabuk bağlantıları veya replika kümesi üyeleri veya mongos örnekleri gibi diğer sunuculardan gelen bağlantılar dahil olmak üzere tüm gelen bağlantıları içerecektir.

connection.available Kullanılmayan gelen bağlantıların sayısı kullanılabilir. Veritabanındaki bağlantı yükünü anlamak için bu değeri connection.current değeri ile ve mevcut bağlantılarla ilgili sistem eşikleri hakkında daha fazla bilgi için UNIX ulimit Settings belgesi ile birlikte düşünün.

connection.totalCreated Sunucuya oluşturulan tüm gelen bağlantıların sayısı. Bu numara, o zamandan beri kapanan bağlantıları içerir.


28

İstemciIP'sine göre Bağlantı Sayısı, Toplam

Bunu, IPAdresine göre toplam bağlantı sayısı ile bağlantı sayısını görüntülemek için kullanırız. Bu, bir sorunu gidermede gerçekten yardımcı oldu ... maksimum bağlantıya ulaşmadan önce oraya gidin!

Mongo Shell için:

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 })

Biçimlendirilmiş:

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 }
)

Örnek iade:

{
    "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 dahili izlemedeki 192.xxx adresleri)

"Dahili", harici bir istemcisi olmayan dahili süreçlerdir. Bunların bir listesini şununla görüntüleyebilirsiniz:

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

İade listesindeki "Dahili" IP'nin anlamını açıklar mısınız?
karton

Yukarıdaki örneği bir mongo atlas örneğinde çalıştıramıyorum: E QUERY [js] TypeError: db.currentOp(...).inprog is undefined :yönetici kullanıcı kullanılıyor
otong

@ karton.swing Yanıtı açıklama ve komutla güncelledim.
SuperGoTeam

@otong ne için geri alıyorsun db.currentOp(true)?
SuperGoTeam

Mongodb atlası tarafından reddedilmiş gibi görünüyor: { "ok" : 0, "errmsg" : "Using $all for currentOp is disallowed in this atlas tier", "code" : 8000, "codeName" : "AtlasError" }
otong

19

db.serverStatus()bağlantıların açık ve uygun olmadığını verir, ancak hangi istemciden gelen bağlantıları göstermez. Daha fazla bilgi için bu komutu kullanabilirsiniz sudo lsof | grep mongod | grep TCP. Çoğaltma yaptığımda ve birincil düğümün ikincilden daha büyük birçok istemci bağlantısı olduğunda buna ihtiyacım var.

$ 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)

Bu, şu anda bilgisayarımdaki MongoDB bağlantı noktasına (27017) açık beş bağlantım olduğunu gösteriyor. Benim durumumda, bir Scalatra sunucusundan MongoDB'ye bağlanıyorum ve MongoDB Casbah sürücüsünü kullanıyorum, ancak kullanılan istemciden bağımsız olarak aynı lsof TCP bağlantılarını göreceksiniz (TCP / IP).


1
Bu komut, tek bağlantı için birden fazla giriş döndürür: stackoverflow.com/a/42930337/1843751
tutuşturmak

3
Lsof için -i işaretini kullanmanızı öneririm. O zaman her bağlantı için yalnızca 1 giriş alırsınız ve TCP için grep yapmanız gerekmez. iesudo lsof -i | grep mongod
datdo

8

Sadece kullanabilirsin

db.serverStatus().connections

Ayrıca, bu işlev Mongo DB'nize bağlı IP adreslerini bulmanıza yardımcı olabilir.

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

1
Kesinlikle güzel - teşekkür ederim! Tam olarak aradığım şey.
ProsperousHeart

7

Mongo veritabanı için tüm bağlantıları aşağıdaki komutu izleyerek görmeye çalıştım.

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

Bu komut, mongodb için her tcp bağlantısını daha ayrıntılı olarak gösterebilir.

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'te de bağlantıları doğrudan ağ arayüzünde görün, sadece şunları yapın:

$ 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)
  • grepVb. Kullanmaya gerek yok , sadece lsof's argümanlarını kullanın .

  • MongoDb'nin CLI'sindeki bağlantıları görmek için @ milan'ın cevabına ( az önce düzenlediğim ) bakın.


5

Ayrıca aşağıdaki bağlantılarla ilgili daha fazla ayrıntı: db.currentOp(true)

Alınan: https://jira.mongodb.org/browse/SERVER-5085


1
Tüm cevapları okudum ve aniden - bu en yararlı olanlardan biri. Sorgu, bağlantı süresi, geçerli tablo, sürücü sürümü ve platform ve hatta belirtilmişse appName dahil olması gerektiği gibi tonlarca dahili ayrıntı verir
Dmitry Gusarov

3

db.runCommand ({"connPoolStats": 1})

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

    },
    "replicaSets" : {

    },
    "ok" : 1
}

Çok ilginç, bu istek için SIFIR değerleri de alıyorum, istediğim bu değil :) MongoMonitoringController : { "numClientConnections" : 0 , "numAScopedConnections" : 0 , "totalInUse" : 0 , "totalAvailable" : 0 , "totalCreated" : 0 , "totalRefreshing" : 0 , "pools" : { } , "hosts" : { } , "replicaSets" : { } , "ok" : 1.0}
Alex Efimov

2

Mongo-shell kullanarak MongoDB'ye bağlanın ve aşağıdaki komutu çalıştırın.

db.serverStatus().connections

Örneğin:

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

2

Üzgünüz çünkü bu eski bir gönderi ve şu anda öncekinden daha fazla seçenek var.

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}}
] )

Çıktı örneği:

{ "_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

Yerel sistemden mongodb örneğinizle bağlantı kurun

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

Tüm bağlı istemcileri ve ayrıntılarını bilmenizi sağlar

  1. db.currentOp (true)


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.