前言
Mongod 的服务模型是每个网络连接由一个单独的线程来处理,连接是要消耗资源的,而且消耗的并不少,每个线程配置了1MB 的栈空间,1000个连接,1G内存就这么没了,甭管是否是活跃连接.
mongod的最大连接数通过 net.maxIncomingConnections 指定,默认值为1000000,相当于没有限制,生产环境强烈建议根据实际需求配置,以避免客户端误用导致 mongod 负载过高。
查看链接数
#用自带的mongos Shell 链接mongodb
//查看
db.serverStatus().connections
//查看内存
db.serverStatus().mem
修改链接数
mongodb启动时有一个参数
--maxConns=50000
表示最大链接数设置为50000;
埋坑:
在服务器中配置mongodb的最大链接数以后,这个可能不会起作用
原因是:linux系统的限制,Linux系统默认一个进程最大文件打开数目为1024。需要修改此限制
#root权限下
//查看系统允许一个进程最大文件打开数目
ulimit -n
>1024
//设置系统允许一个进程最大文件打开数目
ulimit -n 50000
设置以后要重启mongodb才能生效
优化链接数
MongoDB服务器内存要满足 connection overhead + data size + index size
即连接数开销+热点数据+索引
连接数太多的问题:
如果在日志中遇到类似如下的错误信息:
"too many open files"
"too many open connections"
则说明打开的连接数太多了
有两个限制mongod/mongos连接数的地方:
1.操作系统的ulimit限制,可以用ulimit查看open files,是否足够大。linux下默认的open files是1024,在提供服务的时候往往太小。
2.mongodb自身的限制
mongodb(mongod/mongos)在启动的时候,有个参数是–maxConns,用来指定最大的连接数
后记
完