2011-05-26 120 views
6

我有一個短時間內讀/寫速度很快的mongo服務器。我使用python和pymongo,當我今天早上醒來時發現沒有連接可以讓mongod master成爲連接達到19992,它的一個非常可怕的數字如何釋放mongodb連接?

即使我停止了所有的程序,連接數似乎沒有變化

insert query update delete getmore command flushes mapped vsize res faults locked % idx miss %  qr|qw ar|aw netIn netOut conn repl  time 

localhost:27417  0  0  0  0  2  1  0 624m 2.87g 287m  0  0   0  0|0  7|0 162b  1k 19992 M 10:36:16 

> db.serverStatus(1) 
{ 
     "host" : "42yl:27417", 
     "version" : "1.8.1", 
     "process" : "mongod", 
     "uptime" : 71732, 
     "uptimeEstimate" : 71470, 
     "localTime" : ISODate("2011-05-26T03:02:48.301Z"), 
     "globalLock" : { 
       "totalTime" : 71732232290, 
       "lockTime" : 149471421, 
       "ratio" : 0.002083741384148133, 
       "currentQueue" : { 
         "total" : 0, 
         "readers" : 0, 
         "writers" : 0 
       }, 
       "activeClients" : { 
         "total" : 7, 
         "readers" : 7, 
         "writers" : 0 
       } 
     }, 
     "mem" : { 
       "bits" : 32, 
       "resident" : 258, 
       "virtual" : 910, 
       "supported" : true, 
       "mapped" : 624 
     }, 
     "connections" : { 
       "current" : 19792, 
       "available" : 208 
     }, 
     "extra_info" : { 
       "note" : "fields vary by platform", 
       "heap_usage_bytes" : 562688, 
       "page_faults" : 965 
     }, 
     "indexCounters" : { 
       "btree" : { 
         "accesses" : 12789, 
         "hits" : 12789, 
         "misses" : 0, 
         "resets" : 0, 
         "missRatio" : 0 
       } 
     }, 
     "backgroundFlushing" : { 
       "flushes" : 1195, 
       "total_ms" : 848633, 
       "average_ms" : 710.1531380753138, 
       "last_ms" : 101, 
       "last_finished" : ISODate("2011-05-26T03:02:18.691Z") 
     }, 
     "cursors" : { 
       "totalOpen" : 7, 
       "clientCursors_size" : 7, 
       "timedOut" : 0 
     }, 
     "network" : { 
       "bytesIn" : 685742402, 
       "bytesOut" : 2742190274, 
       "numRequests" : 3800041 
     }, 
     "repl" : { 
       "ismaster" : true 
     }, 
     "opcounters" : { 
       "insert" : 104225, 
       "query" : 9, 
       "update" : 925044, 
       "delete" : 45734, 
       "getmore" : 1642979, 
       "command" : 1119290 
     }, 
     "asserts" : { 
       "regular" : 0, 
       "warning" : 56, 
       "msg" : 0, 
       "user" : 0, 
       "rollovers" : 0 
     }, 
     "writeBacksQueued" : false, 
     "ok" : 1 
} 

我查了套接字連接

Active Internet connections (servers and established) 
Proto Recv-Q Send-Q Local Address Foreign Address State 
tcp 0 0 0.0.0.0:60000 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:27424 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:28417 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:28418 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:28419 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:28420 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:28421 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:28422 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:28423 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:28424 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:38422 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:58422 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:27417 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:27418 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:27419 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:8443 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:27420 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:27421 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:27422 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:27423 0.0.0.0:* LISTEN 
tcp 0 0 222.73.61.42:27420 222.73.61.43:38249 ESTABLISHED 
tcp 0 0 127.0.0.1:27417 127.0.0.1:56699 ESTABLISHED 
tcp 0 0 127.0.0.1:27417 127.0.0.1:56698 ESTABLISHED 
tcp 0 0 127.0.0.1:27417 127.0.0.1:56697 ESTABLISHED 
tcp 0 0 127.0.0.1:27417 127.0.0.1:56696 ESTABLISHED 
tcp 0 0 127.0.0.1:27417 127.0.0.1:56702 ESTABLISHED 
tcp 0 0 127.0.0.1:27417 127.0.0.1:56701 ESTABLISHED 
tcp 0 0 127.0.0.1:27417 127.0.0.1:56700 ESTABLISHED 
tcp 0 0 222.73.61.42:27422 222.73.61.43:33616 ESTABLISHED 
tcp 0 0 222.73.61.42:27417 222.73.61.43:60218 ESTABLISHED 
tcp 0 0 222.73.61.42:27423 222.73.61.43:33035 ESTABLISHED 
tcp 0 3324 222.73.61.42:58422 119.85.195.88:54295 ESTABLISHED 
tcp 0 0 222.73.61.42:27424 222.73.61.43:55825 ESTABLISHED 
tcp 0 0 222.73.61.42:54279 222.215.136.8:80 ESTABLISHED 
tcp 0 0 222.73.61.42:27418 222.73.61.43:37093 ESTABLISHED 
tcp 0 0 222.73.61.42:27419 222.73.61.43:38346 ESTABLISHED 
tcp 0 0 127.0.0.1:56702 127.0.0.1:27417 ESTABLISHED 
tcp 0 0 127.0.0.1:56701 127.0.0.1:27417 ESTABLISHED 
tcp 0 0 127.0.0.1:56700 127.0.0.1:27417 ESTABLISHED 
tcp 0 0 127.0.0.1:56699 127.0.0.1:27417 ESTABLISHED 
tcp 0 0 127.0.0.1:56698 127.0.0.1:27417 ESTABLISHED 
tcp 0 0 127.0.0.1:56697 127.0.0.1:27417 ESTABLISHED 
tcp 0 0 127.0.0.1:56696 127.0.0.1:27417 ESTABLISHED 
tcp 0 0 222.73.61.42:27421 222.73.61.43:39843 ESTABLISHED 
udp 0 0 0.0.0.0:48514 0.0.0.0:* 
udp 0 0 222.73.61.42:50721 61.128.128.68:53 ESTABLISHED 
udp 0 0 127.0.0.1:52274 127.0.0.1:52274 ESTABLISHED 
Active UNIX domain sockets (servers and established) 
Proto RefCnt Flags Type State I-Node Path 
unix 2 [ ACC ] STREAM LISTENING 9081684 /var/run/nscd/socket 
unix 2 [ ACC ] STREAM LISTENING 18011686 /tmp/mongodb-27417.sock 
unix 2 [ ACC ] STREAM LISTENING 18011689 /tmp/mongodb-27422.sock 
unix 2 [ ACC ] STREAM LISTENING 18011691 /tmp/mongodb-28422.sock 
unix 2 [ ACC ] STREAM LISTENING 18011697 /tmp/mongodb-27420.sock 
unix 2 [ ACC ] STREAM LISTENING 18011702 /tmp/mongodb-28417.sock 
unix 2 [ ACC ] STREAM LISTENING 18011693 /tmp/mongodb-27421.sock 
unix 2 [ ACC ] STREAM LISTENING 18011695 /tmp/mongodb-28421.sock 
unix 2 [ ACC ] STREAM LISTENING 18011699 /tmp/mongodb-28420.sock 
unix 2 [ ACC ] STREAM LISTENING 18011710 /tmp/mongodb-27419.sock 
unix 2 [ ACC ] STREAM LISTENING 18011713 /tmp/mongodb-28419.sock 
unix 2 [ ACC ] STREAM LISTENING 18011716 /tmp/mongodb-27418.sock 
unix 2 [ ACC ] STREAM LISTENING 18011719 /tmp/mongodb-28418.sock 
unix 2 [ ACC ] STREAM LISTENING 18011722 /tmp/mongodb-27424.sock 
unix 2 [ ACC ] STREAM LISTENING 18011725 /tmp/mongodb-28424.sock 
unix 2 [ ACC ] STREAM LISTENING 18011728 /tmp/mongodb-27423.sock 
unix 2 [ ACC ] STREAM LISTENING 18011731 /tmp/mongodb-28423.sock 
unix 2 [ ACC ] STREAM LISTENING 12771288 /tmp/.s.PGSQL.5432 
unix 2 [ ] DGRAM 3651 @/org/kernel/udev/udevd 
unix 5 [ ] DGRAM 16472048 /dev/log 
unix 2 [ ] STREAM CONNECTED 18706425 /var/run/nscd/socket 
unix 2 [ ] DGRAM 16792651 
unix 2 [ ] DGRAM 16472057 
unix 2 [ ] DGRAM 16472052 

回答

0

我GOOGLE了一下你和MongoDB的官方網站發現這樣:mongodb-docs

嘗試使用:

waitQueueTimeoutMS=ms 

"The amount of time a thread can wait for a connection to become available before timing out. This only applies if the connection pool has reached the maximum size and all connections are already in use." 

或:

waitQueueMultiple=n 

"The drivers impose a limit on how many threads can be waiting for a connection at the same time. This limit is expressed as a multiple of maxPoolSize." 
+0

感謝您的答案吧幫助客戶端處理超時。但我只是想知道如果服務器是滿的,我可以釋放或殺死一些連接來拯救服務器,而不是重新啓動它:D – davyzhang 2011-05-28 15:57:55

+0

aha ...我檢查了數據庫命令列表[鏈接](http://www.mongodb .org/display/DOCS/List + of + Database + Commands),但找不到任何會重新啓動連接的內容。很奇怪,沒有一個 – karantan 2011-06-14 06:39:11

0

如果您導航到/ tmp /,你應該看到 'MongoDB的-.sock'。你可以刪除它。另外,dbpath中可能有一個mongod.lock。刪除它將釋放它。

-1

用途:

Service mongodb stop 

否則,殺MongoDB的連接

2

之前我們所遇到同樣的問題,我覺得這是與Linux系統調優TCP_KEEPALIVE_TIME,一個問題,指定超時對於一個給定tcp連接。對於你的情況,你在短時間內有很高的讀/寫,這可以爲TCP連接創建一個更低的超時配置。

通過使用下面的命令,它可以幫助你:

Checking current config: 
[[email protected] ~]# cat /proc/sys/net/ipv4/tcp_keepalive_time 
7200 

Changing config: 
echo 300 > /proc/sys/net/ipv4/tcp_keepalive_time 

下面是一些內部備忘錄由我公司:

After some researching for 30,Jul's failure of mongo on testbed, ip 118.26, I found something familiar with production: 
1. Total Connections reach 970+ which mongo start to block all the incoming connections. 
2. Check netstat, only nearly 100 something connections are kept listening or waiting. 
3. Check iostat, and cpu, memory, not a high utilization rate, several percent around 10. 
Log: 
Tue Jul 30 10:19:03.575 [initandlisten] connection accepted from 192.168.118.18:52858 #261673 (974 connections now open) 
Tue Jul 30 10:19:03.575 [initandlisten] pthread_create failed: errno:11 Resource temporarily unavailable 
Tue Jul 30 10:19:03.575 [initandlisten] can't create new thread, closing connection 
After checking official manual, I found that our tcp keep-alive value may be too high: 
[[email protected] ~]# cat /proc/sys/net/ipv4/tcp_keepalive_time 
7200 
I suggest to change the such value to 300 for a short keep-alive for tcp connections. 
Can be done with following command: 
echo 300 > /proc/sys/net/ipv4/tcp_keepalive_time 
Notes: This can only change this value temporarily. If we reboot the system, it would be reset to default value. If we want to make persistent change, please reference at the Linux operation guide. 

希望這可以幫助你。更多信息:

MongoDB Official Doc for TCP Tuning