在linux平台下,无论是64位或者32位的mongodb默认最大连接数都是819,win平台不知道,估计也没有人在 win平台下使用mongodb做生产
在linux平台下,无论是64位或者32位的mongodb默认最大连接数都是819,win平台不知道,估计也没有人在 win平台下使用mongodb做生产环境
# mongo admin -u root -p password
mongodb shell version: 2.4.1
connecting to: 192.168.6.42/admin
> db.serverstatus().connections
{ current : 1, available : 818, totalcreated : numberlong(1) }
途中available显示818少了一个,表示空闲的。current表示已经占用了的连接数,两数一加就等于819,如果我现在在连接一个,那么available就是817,current就是2
[root@linuxidc mongodb-linux-i686-2.4.1]mongodb shell version: 2.4.1
connecting to: 192.168.6.42/test
> db.serverstatus().connections
{ : 1, : 818, : numberlong(1) }
> db.serverstatus().connections
{ : 2, : 817, : numberlong(2) }
819个连接数对于一般的站点我认为已经够用,并且都是现连现取现断。但这个连接数也可以修改,只要在启动的时候加入--maxconns即可
服务器启动
[root@lee mongodb-linux-x86_64-2.4.1]wed apr 3 11:06:21.905 [initandlisten] mongodb starting : pid=2812 port=27017 dbpath=/root/db 64-bit host=lee
wed apr 3 11:06:21.957 [initandlisten] db version v2.4.1
wed apr 3 11:06:21.957 [initandlisten] git version: 1560959e9ce11a693be8b4d0d160d633eee75110
wed apr 3 11:06:21.957 [initandlisten] build info: linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen wed apr 3 11:06:21.957 [initandlisten] allocator: tcmalloc
wed apr 3 11:06:21.957 [initandlisten] options: { dbpath: , maxconns: 2000 }
wed apr 3 11:06:21.982 [initandlisten] journal dir=/root/db/journal
wed apr 3 11:06:21.982 [initandlisten] recover : no journal files present, no recovery needed
wed apr 3 11:06:22.297 [initandlisten] preallocateisfaster=true 2.62
wed apr 3 11:06:22.717 [initandlisten] --maxconns too high, can only handle 819
wed apr 3 11:06:22.724 [initandlisten] waiting for connections on port 27017
wed apr 3 11:06:22.725 [websvr] admin web console waiting for connections on port 28017
wed apr 3 11:06:25.126 [initandlisten] connection accepted from 192.168.4.86:53917 #1 (1 connection now open)
查询最大连接数
[root@linuxidc mongodb-linux-i686-2.4.1]mongodb shell version: 2.4.1
connecting to: 192.168.6.42/test
> db.serverstatus().connections
{ : 1, : 818, : numberlong(1) }
>
发现还是819?其实是linux默认进程能打开最大文件数有关,可以通过ulimit 解决
[root@lee mongodb-linux-x86_64-2.4.1][root@lee mongodb-linux-x86_64-2.4.1]wed apr 3 11:11:07.013 [initandlisten] mongodb starting : pid=2930 port=27017 dbpath=/root/db 64-bit host=lee
wed apr 3 11:11:07.013 [initandlisten] db version v2.4.1
wed apr 3 11:11:07.013 [initandlisten] git version: 1560959e9ce11a693be8b4d0d160d633eee75110
wed apr 3 11:11:07.013 [initandlisten] build info: linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen wed apr 3 11:11:07.013 [initandlisten] allocator: tcmalloc
wed apr 3 11:11:07.013 [initandlisten] options: { dbpath: , maxconns: 2000 }
wed apr 3 11:11:07.031 [initandlisten] journal dir=/root/db/journal
wed apr 3 11:11:07.031 [initandlisten] recover : no journal files present, no recovery needed
wed apr 3 11:11:07.170 [initandlisten] waiting
再查看最大连接数,搞定
[root@linuxidc mongodb-linux-i686-2.4.1]mongodb shell version: 2.4.1
connecting to: 192.168.6.42/test
> db.serverstatus().connections
{ : 1, : 1999, : numberlong(1) }
>
关于ulimit的更多知识大家可以去网上检索检索
客户端程序通常是通过driver来接,由于每次建立链接的成本都挺高,因此都用链接池来实现,spring data mongodb中是如下配置